diff --git a/environment.yaml b/environment.yaml index 96ef5c9..c909b85 100644 --- a/environment.yaml +++ b/environment.yaml @@ -13,6 +13,7 @@ channels: - conda-forge dependencies: - python >=3.10 + - bmi-geotiff - bmi-topography - bmipy - imageio diff --git a/lessons/best-practices/collaboration-etiquette.md b/lessons/best-practices/collaboration-etiquette.md index 7d26887..9bad6d1 100644 --- a/lessons/best-practices/collaboration-etiquette.md +++ b/lessons/best-practices/collaboration-etiquette.md @@ -80,9 +80,15 @@ for working on a collaborative project. ## General +1. Don't hardcode model configuration values; use a configuration file in a plain text format like cfg, yaml, or toml, and read in the values. + +1. You don't need an upstream remote when you own a repository. If your team or organization owns a repository, an upstream remote may not be necessary (depending on org rules or practices), but it may still be a good idea. + 1. Avoid including data (input or output) in a source code repository. There's some gray area for data used in an example, but the data should be small. +1. If a function takes up more than one screen, it may be too long. Consider factoring it into smaller programs. + 1. Build scientific visualizations programmatically, ideally using an open source language or, secondarily, a scriptable open source visualization tool. 1. Don't alter a visualization manually (e.g., using commercial software such as Adobe Illustrator) after creating it. This breaks reproducibility. diff --git a/lessons/hpc/index.md b/lessons/hpc/index.md index 4380d76..c7e2559 100644 --- a/lessons/hpc/index.md +++ b/lessons/hpc/index.md @@ -16,7 +16,7 @@ In this lesson we'll learn how to submit and run jobs on a cluster computer. Cluster computing is explored in the following linked documents. 1. [Overview of cluster computing](./cluster-computing-overview.md) -1. [Blanca](https://curc.readthedocs.io/en/latest/access/blanca.html) +1. [Blanca](https://curc.readthedocs.io/en/latest/clusters/blanca/blanca.html) 1. [Getting a login on Blanca](https://csdms.colorado.edu/wiki/HPC) 1. [Logging in to Blanca](https://curc.readthedocs.io/en/latest/access/rmacc.html#logging-in-to-open-ondemand) 1. [Modules](https://curc.readthedocs.io/en/latest/compute/modules.html) diff --git a/lessons/landlab/landlab/02-data.a.ipynb b/lessons/landlab/landlab/02-data.a.ipynb index 6d23ac0..167e8ce 100644 --- a/lessons/landlab/landlab/02-data.a.ipynb +++ b/lessons/landlab/landlab/02-data.a.ipynb @@ -75,7 +75,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The values of the field nammed, \"foo\"," + "The values of the field named, \"foo\"," ] }, { diff --git a/lessons/landlab/landlab/02-data.ipynb b/lessons/landlab/landlab/02-data.ipynb index 3c8a9d8..b40f987 100644 --- a/lessons/landlab/landlab/02-data.ipynb +++ b/lessons/landlab/landlab/02-data.ipynb @@ -75,7 +75,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The values of the field nammed, \"foo\"," + "The values of the field named, \"foo\"," ] }, { diff --git a/lessons/landlab/landlab/05-components.a.ipynb b/lessons/landlab/landlab/05-components.a.ipynb index 03012ee..7fe0b7b 100644 --- a/lessons/landlab/landlab/05-components.a.ipynb +++ b/lessons/landlab/landlab/05-components.a.ipynb @@ -13,14 +13,12 @@ "source": [ "## Introduction to Landlab Components\n", "\n", - "A \"potluck supper\" is a common American tradition in which each guest brights a dish to share. These contributed dishes usually come in one of a few categories: salads, drinks, main dishes, desserts. The meal comes together as a collection of components, each of which contributes to fulfilling one of these basic roles. The resulting meal provides guests with a great variety of choices. A guest can compose their own complete and unique meal by combining their own choices for components. And each guest, while contributing their own particular dish, get to share in the creations of their compatriots. There's a bit of standardization---the dishes are sized to fit on the tables, and their contents are accessible to the usual range of serving utensils---but with that standardization lies a great range of creativity.\n", + "A \"potluck\" is a meal in which each guest brings a dish to share. These contributed dishes usually come in one of a few categories: salads, drinks, main dishes, desserts. The meal comes together as a collection of components, each of which contributes to fulfilling one of these basic roles. The resulting meal provides guests with a great variety of choices. A guest can compose their own complete and unique meal by combining their own choices for components. And each guest, while contributing their own particular dish, get to share in the creations of their compatriots. There's a bit of standardization---the dishes are sized to fit on the tables, and their contents are accessible to the usual range of serving utensils---but with that standardization lies a great range of creativity.\n", "\n", "Component modeling is a bit like the potluck tradition: one can construct a complete simulation by assembling components to represent the different parts of the system to be modeled. In Landlab, a **component** is a semi-standardized Python *class* that represents a particular process or calculation. Components are not stand-alone programs, but rather are designed to be used within another Python program that creates an integrated model or workflow.\n", "\n", - "\n", - "*Figure 1: A potluck meal (wikimedia commons).*\n" + "\n", + "*Figure 1: A potluck meal (\"Eat Alberta Potluck\" from Wikimedia Commons).*\n" ] }, { @@ -33,17 +31,15 @@ "\n", "Here's an example from the Landlab tutorial *Green-Ampt infiltration and kinematic wave overland flow*. The example code in the tutorial uses two components, `SoilInfiltrationGreenAmpt` and `KinwaveImplicitOverlandFlow`, to calculate overland flow and infiltration across a terrain that is represented by a digital elevation model.\n", "\n", - "![bijou_gully_topography.png](attachment:bijou_gully_topography.png)\n", - "*Figure 2: topography of a gullied area on the Colorado high plains (from Landlab tutorial \"Green-Ampt infiltration and kinematic wave overland flow\").*\n", - "\n" + "\n", + "*Figure 2: topography of a gullied area on the Colorado high plains (from Landlab tutorial \"Green-Ampt infiltration and kinematic wave overland flow\").*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "![bijou_gully_infiltration.png](attachment:bijou_gully_infiltration.png)\n", - "\n", + "\n", "*Figure 3: cumulative infiltration water depth during a simulated five-minute heavy rainfall (from Landlab tutorial \"Green-Ampt infiltration and kinematic wave overland flow\")*\n", "\n", "The following code snippets illustrate how the components are imported...\n", diff --git a/lessons/landlab/landlab/05-components.ipynb b/lessons/landlab/landlab/05-components.ipynb index 4218e4d..d68ca61 100644 --- a/lessons/landlab/landlab/05-components.ipynb +++ b/lessons/landlab/landlab/05-components.ipynb @@ -13,14 +13,12 @@ "source": [ "## Introduction to Landlab Components\n", "\n", - "A \"potluck supper\" is a common American tradition in which each guest brights a dish to share. These contributed dishes usually come in one of a few categories: salads, drinks, main dishes, desserts. The meal comes together as a collection of components, each of which contributes to fulfilling one of these basic roles. The resulting meal provides guests with a great variety of choices. A guest can compose their own complete and unique meal by combining their own choices for components. And each guest, while contributing their own particular dish, get to share in the creations of their compatriots. There's a bit of standardization---the dishes are sized to fit on the tables, and their contents are accessible to the usual range of serving utensils---but with that standardization lies a great range of creativity.\n", + "A \"potluck\" is a meal in which each guest brings a dish to share. These contributed dishes usually come in one of a few categories: salads, drinks, main dishes, desserts. The meal comes together as a collection of components, each of which contributes to fulfilling one of these basic roles. The resulting meal provides guests with a great variety of choices. A guest can compose their own complete and unique meal by combining their own choices for components. And each guest, while contributing their own particular dish, get to share in the creations of their compatriots. There's a bit of standardization---the dishes are sized to fit on the tables, and their contents are accessible to the usual range of serving utensils---but with that standardization lies a great range of creativity.\n", "\n", "Component modeling is a bit like the potluck tradition: one can construct a complete simulation by assembling components to represent the different parts of the system to be modeled. In Landlab, a **component** is a semi-standardized Python *class* that represents a particular process or calculation. Components are not stand-alone programs, but rather are designed to be used within another Python program that creates an integrated model or workflow.\n", "\n", - "\n", - "*Figure 1: A potluck meal (wikimedia commons).*\n" + "\n", + "*Figure 1: A potluck meal (\"Eat Alberta Potluck\" from Wikimedia Commons).*\n" ] }, { @@ -33,7 +31,7 @@ "\n", "Here's an example from the Landlab tutorial *Green-Ampt infiltration and kinematic wave overland flow*. The example code in the tutorial uses two components, `SoilInfiltrationGreenAmpt` and `KinwaveImplicitOverlandFlow`, to calculate overland flow and infiltration across a terrain that is represented by a digital elevation model.\n", "\n", - "![bijou_gully_topography.png](attachment:bijou_gully_topography.png)\n", + "\n", "*Figure 2: topography of a gullied area on the Colorado high plains (from Landlab tutorial \"Green-Ampt infiltration and kinematic wave overland flow\").*\n", "\n" ] @@ -42,8 +40,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "![bijou_gully_infiltration.png](attachment:bijou_gully_infiltration.png)\n", - "\n", + "\n", "*Figure 3: cumulative infiltration water depth during a simulated five-minute heavy rainfall (from Landlab tutorial \"Green-Ampt infiltration and kinematic wave overland flow\")*\n", "\n", "The following code snippets illustrate how the components are imported...\n", diff --git a/lessons/landlab/landlab/media/Eat_Alberta_Potluck.jpg b/lessons/landlab/landlab/media/Eat_Alberta_Potluck.jpg new file mode 100644 index 0000000..22b4986 Binary files /dev/null and b/lessons/landlab/landlab/media/Eat_Alberta_Potluck.jpg differ diff --git a/lessons/landlab/landlab/media/bijou_gully_infiltration.png b/lessons/landlab/landlab/media/bijou_gully_infiltration.png new file mode 100644 index 0000000..90cec01 Binary files /dev/null and b/lessons/landlab/landlab/media/bijou_gully_infiltration.png differ diff --git a/lessons/landlab/landlab/media/bijou_gully_topography.png b/lessons/landlab/landlab/media/bijou_gully_topography.png new file mode 100644 index 0000000..d7b1448 Binary files /dev/null and b/lessons/landlab/landlab/media/bijou_gully_topography.png differ