| Thing | Badge |
|---|---|
| CI Status | |
| Coverage | |
| Docs | |
| Notebooks | |
| License | |
| Style | |
| DOI | |
| Conda Recipe | |
| Downloads | |
| Version | |
| Platforms | |
| Binder |
A modular landscape evolution modeling package built on top of the Landlab Toolkit.
terrainbento"s User Manual is located at our Read The Docs page.
We recommend that you start with a set of Jupyter notebooks that introduce terrainbento and the model description paper Barnhart et al. (2019). The link above goes to a Binder instance, if you want the notebooks themselves clone the repo and navigate to the directory
notebooks.
The following is all the code needed to run the Basic model. There are a few different options available to create a model, here we will create one from a file-like object. The string will contain the same information as a YAML style input file that specifies the model construction and run.
from terrainbento import Basic
params = {
# create the Clock.
"clock": {"start": 0,
"step": 10,
"stop": 1e5},
# Create the Grid
"grid": {
"RasterModelGrid": [
(200, 320),
{
"xy_spacing": 10
},
{
"fields": {
"node": {
"topographic__elevation": {
"random": [{
"where": "CORE_NODE"
}]
}
}
}
},
]
},
# Set up Boundary Handlers
"boundary_handlers":{"NotCoreNodeBaselevelHandler": {"modify_core_nodes": True,
"lowering_rate": -0.001}},
# Parameters that control output.
"output_interval": 1e3,
"save_first_timestep": True,
"fields":["topographic__elevation"],
# Parameters that control process and rates.
"water_erodibility" : 0.001,
"m_sp" : 0.5,
"n_sp" : 1.0,
"regolith_transport_parameter" : 0.2,
}
model = Basic.from_dict(params)
model.run()Next we make an image for each output interval.
from landlab import imshow_grid
filenames = []
ds = model.to_xarray_dataset()
for i in range(ds.topographic__elevation.shape[0]):
filename = "temp_output."+str(i)+".png"
imshow_grid(model.grid, ds.topographic__elevation.values[i, :, :], cmap="viridis", limits=(0, 12), output=filename)
filenames.append(filename)
model.remove_output_netcdfs()Finally we compile the images into a gif.
import os
import imageio
with imageio.get_writer("terrainbento_example.gif", mode="I") as writer:
for filename in filenames:
image = imageio.imread(filename)
writer.append_data(image)
os.remove(filename)Before installing terrainbento you will need a Python distribution. We recommend that you use the Anaconda python distribution. We strongly suggest that you install the current 3.* version of Python.
To install the release version of terrainbento (this is probably what you want) we support conda and pip package management.
Open a terminal and execute the following:
conda config --add channels conda-forge
conda install terrainbento
Open a terminal and execute the following:
pip install terrainbento
To install the terrainbento source code version of terrainbento we recommend creating a conda environment for terrainbento.
git clone https://github.com/TerrainBento/terrainbento.git
cd terrainbento
conda env create -f environment-dev.yml
conda activate terrainbento_dev
pip install .
If you plan to develop with terrainbento, please fork terrainbento, clone the forked repository, and create an editable install with:
pip install -e .We use nox for most project tasks in terrainbento. Install nox and list the available sessions with:
pip install -e ".[dev]"
nox --listTo use nox to run the terrainbento tests, for example, call the test session:
nox -s testIf you have any questions, please contact us by making an issue.
Barnhart, K. R., Glade, R. C., Shobe, C. M., and Tucker, G. E.: Terrainbento 1.0: a Python package for multi-model analysis in long-term drainage basin evolution, Geosci. Model Dev., 12, 1267-1297, https://doi.org/10.5194/gmd-12-1267-2019, 2019.
