A model of dunes and snow waves
- Motivation
- Getting started
- Features
- References and further reading
- Community guidelines
- Contributors
- License
When wind blows over snow, it self-organizes. This forms surface features, such as ripples and dunes, that alter the reflectivity and thermal conductivity of the snow.
Studying these features in the field is cold and challenging (we've tried), so we created rescal-snow to enable snow scientists to study snow features in controlled numerical experiments. We hope that this model will be useful to researchers in snow science, geomorphology, and polar climate.
Rescal-snow is able to simulate:
- Snow/sand grain erosion and deposition by wind
- Snowfall
- Time-dependent cohesion (snow sintering)
- Avalanches of loose grains
Rescal-snow is also designed for robust, reproducible science, and contains tools for high-performance computing, data management, and data analysis, including:
- Workflow tools for generating and running many simulations in parallel
- A python-based workflow that manages data and analysis at runtime
We assume you have reasonable familiarity with bash and terminal commands. If you have never used bash, we recommend you stop and work through a short tutorial. (Our favorite is 'The Unix Shell' from Software Carpentry.) If you modify rescal-snow, you will need to modify and compile C code. We have also included some setup and analysis tools (used in Example 5) written in Python.
- C compiler (GCC and CLANG are known to work)
- CMake >= 3.9 (used for compiling)
- make (used for compiling)
- libpng (known to work with v1.6.37)
- Optional packages used for analysis (see the analysis and scripts/utilities directories):
- Python3 (used for analysis)
- numpy (used by Python3 for analysis)
- pandas (used by Python3 for analysis)
- scipy (used by Python3 for analysis)
On a Debian-based/Ubuntu Linux machine, the dependencies can be acquired using:
sudo apt install gcc cmake make libpng-dev zlib1g-dev python3 python3-numpy python3-pandas python3-scipy
On most machines, the Python packages can also be acquired using:
pip3 install numpy pandas scipy
Download rescal-snow by cloning this repository with git:
git clone https://github.com/kellykochanski/rescal-snow.git
cd rescal-snow
You may also download the repository manually from Github.
In a terminal, navigate into the main rescal-snow directory (shown above). Run:
mkdir build
cd build
cmake -Wno-dev -DCMAKE_BUILD_TYPE=Release .. #Debug can be used instead of Release
make -j 4 #Adjust to the number of cores you have for a speedy build
The examples below are fully described in the tutorial: docs/rescal-snow-tutorial.md. The docs folder also contains descriptions of additional configuration and analysis options; check these if you're looking for functionality not found in the tutorial.
The default configuration for Rescal-snow simulates snow (or sand) dune formation. This simulates processes including air flow; grain entrainment, saltation, suspension and deposition; and granular avalanches.
In these conditions, a pile of sand/snow (left) evolves into a dart-shaped barchan dune (middle), then dwindles as grains blow away without being resupplied (right).
Initial condition, t = 0t0 | t = 30t0 | t = 90t0 |
---|---|---|
Each of the three images above shows a shaded top-down view of a dune (top left), cross-sections through the dune, along the dashed lines (middle left, top right), and a cross-section showing the pressure intensity in the fluid (bottom left).
Snow cohesion increases over time: this is called sintering. Rescal-snow is able to simulate the transition of loose (beige) grains into sintered (light purple) grains within waves and dunes.
Rescal-snow simulates snow by adding loose grains to the top of the simulation. The gif at the top of this page shows a height-map of a field of dunes and waves growing during snowfall.
We believe that building robust, trustworthy models is much simpler when it's easy to make many model runs.
Rescal-snow contains a series of tools for running many simulation instances in parallel, and managing the associated flows of input and output data.
The following phase diagram shows images produced by ten parallel runs simulating different rates of snowfall (lambda_I) and wind speed (Tau_min).
The docs folder contains additional information on performance and parallelization issues, model inputs and configuration, model calibration and validation, and development history
For more background on snow dunes, sintering, and self-organization, see:
- 'Snow bedforms: A review, new data, and a formation model', Filhol and Sturm, 2015
- 'The evolution of snow bedforms in the Colorado Front Range', Kochanski, Anderson and Tucker, 2019
- 'Statistical classification of self-organized snow surfaces', Kochanski, Anderson and Tucker, 2018
- 'Studies on interaction between wind and dry snow surface', Kobayashi, 1980
For more information about the backend function of the cellular automaton and lattice gas model, see:
- 'Setting the length and timescales of a cellular automaton dune model', Narteau et al., 2009
- 'A real-space cellular automaton laboratory', Rozier and Narteau, 2014
- 'Transport capacity and saturation mechanism in a real-space cellular automaton dune model', Gao et al., 2014 To learn the underlying principles of the lattice gas cellular automaton (LGCA) model (recommended before modifying the LGCA, the boundary conditions, or the aspect ratio of the simulation) see:
- 'Lattice-gas automata for the Navier-Stokes equation', Frisch, Hasslacher and Pomeau, 1986'
We encourage you to interact with the project through Github (see below). This will allow easy integration of your changes and prevent rescal-snow from fragmenting excessively. We use this git workflow, with the expectation that new changes will be tested on the examples in the README, docs, or tutorials. If you're not familiar with git, see the software carpentry git tutorial.
Do you want to incentivize developers to build and maintain the software you need? Cite us!
This software inherits many features from the Real-Space Cellular Automaton Laboratory, ReSCAL. Credit them by citing:
If you have challenges or questions, look at the material under 'further information' or reach out to us.
Issues should be reported using Github's issue tracking function on this repository, here.
Issues which cannot be handled via Github can be addressed to
Kelly Kochanski
[email protected]
www.github.com/kellykochanski
If you wish to contribute a new feature or report a bug, welcome! See how to do this in CONTRIBUTING.md. Rescal-snow is distributed under the GNU GPL 3.0 license; all contributions must be made under this license or a later version.
See AUTHORS.md.
Rescal-snow branched off of ReSCAL (v1.6) in 2016, and continues to use the ReSCAL backend for the cellular automaton and lattice gas models. This history is described in NEWS.md and the original code is available on branch rescal-1.6
. Ongoing ReSCAL development is described at http://www.ipgp.fr/~rozier/rescal/rescal.html (the English version of this website is updated less regularly than the French). Our code is no longer easily compatible with ReSCAL, as we have removed features, unused code, and dependencies that were not related to wind-blown snow and reduced performance on high-performance computing systems. We are adopting a small fraction of new ReSCAL features on a case-by-case basis depending on their relevance to wind blown snow.
GNU GPL 3.0 or any later version. See LICENSE. SPDX-License-Identifier: GPL-3.0-or-later. This document was released from Lawrence Livermore National Laboratory under open source software release LLNL-CODE-785837; see NOTICE for details.