Weak layer anticrack nucleation model
Project description
WEAC
Weak Layer Anticrack Nucleation Model
Implementation of closed-form analytical models for the analysis of dry-snow slab avalanche release.
View the demo ·
Report a bug ·
Request a feature ·
Read the docs ·
Cite the software
Contents
About the project
WEAC implements closed-form analytical models for the mechanical analysis of dry-snow slabs on compliant weak layers, the prediction of anticrack onset, and, in particular, allows for the analysis of stratified snow covers. The model covers propagation saw tests (a), and uncracked (b) or cracked (c) skier-loaded buried weak layers.
Cite the repository as:
Rosendahl, P. L., Schneider, J., & Weissgraeber, P. (2022). Weak Layer Anticrack Nucleation Model (WEAC). Zenodo. https://doi.org/10.5281/zenodo.5773113
Read the 📄 white paper for model derivations, illustrations, dimensions, material properties, and kinematics:
- Weißgraeber, P. & Rosendahl, P. L. (2023). A closed-form model for layered snow slabs. The Cryosphere, 17(4), 1475–1496. https://doi.org/10.5194/tc-17-1475-2023
For more background info, please refer to the companion papers:
- Rosendahl, P. L. & Weißgraeber, P. (2020). Modeling snow slab avalanches caused by weak-layer failure – Part 1: Slabs on compliant and collapsible weak layers. The Cryosphere, 14(1), 115–130. https://doi.org/10.5194/tc-14-115-2020
- Rosendahl, P. L. & Weißgraeber, P. (2020). Modeling snow slab avalanches caused by weak-layer failure – Part 2: Coupled mixed-mode criterion for skier-triggered anticracks. The Cryosphere, 14(1), 131–145. https://doi.org/10.5194/tc-14-131-2020
Written in 🐍 Python and built with 💻 Visual Studio Code, 🐙 GitKraken, and 🪐 Jupyter. Note that release v1.0 was written and built in 🌋 MATLAB.
Installation
Install globally using the pip
Package Installer for Python
pip install -U weac
or clone the repo
git clone https://github.com/2phi/weac
for local use.
Needs
- Python ≥ 3.10
- Numpy for matrix operations
- Scipy for solving optimization problems
- Pandas for data handling
- Matplotlib for plotting
Usage
The following describes the basic usage of WEAC. Please refer to the demo for more examples and read the documentation for details.
Load the module.
import weac
Choose a snow profile from the database (see demo) or create your own as a 2D array where the columns are density (kg/m^2) and layer thickness (mm). One row corresponds to one layer counted from top (below surface) to bottom (above weak layer).
myprofile = [[170, 100], # (1) surface layer
[190, 40], # (2)
[230, 130], # :
[250, 20], # :
[210, 70], # (i)
[380, 20], # :
[280, 100]] # (N) last slab layer above weak layer
Create a model instance with optional custom layering.
skier = weac.Layered(system='skier', layers=myprofile)
Calculate lists of segment lengths, locations of foundations, and position and magnitude of skier loads from the inputs total length L
(mm), crack length a
(mm), and skier weight m
(kg). We can choose to analyze the situtation before a crack appears even if a crack length > 0 is set by replacing the 'crack'
key thorugh the 'nocrack'
key.
segments = skier.calc_segments(L=10000, a=300, m=80)['crack']
Assemble the system of linear equations and solve the boundary-value problem for the free constants C
providing the inclination phi
(counterclockwise positive) in degrees.
C = skier.assemble_and_solve(phi=38, **segments)
Prepare the output by rasterizing the solution vector at all horizontal positions xsl
(slab). The result is returned in the form of the ndarray z
. We also get xwl
(weak layer) that only contains x-coordinates that are supported by a foundation.
xsl, z, xwl = skier.rasterize_solution(C=C, phi=38, **segments)
Visualize the results.
# Visualize deformations as a contour plot
weac.plot.deformed(skier, xsl=xsl_skier, xwl=xwl_skier, z=z_skier,
phi=inclination, window=200, scale=200,
field='principal')
# Plot slab displacements (using x-coordinates of all segments, xsl)
weac.plot.displacements(skier, x=xsl, z=z, **segments)
# Plot weak-layer stresses (using only x-coordinates of bedded segments, xwl)
weac.plot.stresses(skier, x=xwl, z=z, **segments)
Compute output quantities for exporting or plotting.
# Slab deflections (using x-coordinates of all segments, xsl)
x_cm, w_um = skier.get_slab_deflection(x=xsl, z=z, unit='um')
# Weak-layer shear stress (using only x-coordinates of bedded segments, xwl)
x_cm, tau_kPa = skier.get_weaklayer_shearstress(x=xwl, z=z, unit='kPa')
Roadmap
See the open issues for a list of proposed features and known issues.
v3.0
- New mathematical foundation to improve the weak-layer representation
- Complex terrain through the addition of out-of-plane tilt
- Up, down, and cross-slope cracks
v2.7
- Finite fracture mechanics implementation for layered snow covers
v2.6
- Implement anistropic weak layer
- Add demo gif
Release history
v2.5
- Analyze slab touchdown in PST experiments by setting
touchdown=True
- Completely redesigned and significantly improved API documentation
v2.4
- Choose between slope-normal (
'-pst'
,'pst-'
) or vertial ('-vpst'
,'vpst-'
) PST boundary conditions
v2.3
- Stress plots on deformed contours
- PSTs now account for slab touchdown
v2.2
- Sign of inclination
phi
consistent with the coordinate system (positive counterclockwise) - Dimension arguments to field-quantity methods added
- Improved aspect ratio of profile views and contour plots
- Improved plot labels
- Convenience methods for the export of weak-layer stresses and slab deformations provided
- Wrapper for (re)calculation of the fundamental system added
- Now allows for distributed surface loads
v2.1
- Consistent use of coordinate system with downward pointing z-axis
- Consitent top-to-bottom numbering of slab layers
- Implementation of PSTs cut from either left or right side
v2.0
- Completely rewritten in 🐍 Python
- Coupled bending-extension ODE solver implemented
- Stress analysis of arbitrarily layered snow slabs
- FEM validation of
- displacements
- weak-layer stresses
- energy release rates in weak layers
- Documentation
- Demo and examples
v1.0
- Written in 🌋 MATLAB
- Deformation analysis of homogeneous snow labs
- Weak-layer stress prediction
- Energy release rates of cracks in weak layers
- Finite fracture mechanics implementation
- Prediction of anticrack nucleation
How to contribute
- Fork the project
- Create your feature branch (
git checkout -b feature/amazingfeature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazingfeature
) - Open a pull request
Workflows
License
Copyright 2phi GbR, 2020-2024.
We currently do not offer an open-source license. Please contact us for private licensing options.
Contact
E-mail: mail@2phi.de · Web: https://2phi.de · Project Link: https://github.com/2phi/weac · Project DOI: http://dx.doi.org/10.5281/zenodo.5773113
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file weac-2.5.2.tar.gz
.
File metadata
- Download URL: weac-2.5.2.tar.gz
- Upload date:
- Size: 297.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a6e1560e16a390f143caf066baf1ad2cf4acd6e39278cb04c8f2e3d4ba210b11 |
|
MD5 | 13b26805080e7c7b70bd8edfa2cb6bbe |
|
BLAKE2b-256 | 6747e73d401085f53e46ddd90c25b37fe7aba28357bc73f21a511e98c92a12c2 |
File details
Details for the file weac-2.5.2-py3-none-any.whl
.
File metadata
- Download URL: weac-2.5.2-py3-none-any.whl
- Upload date:
- Size: 37.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 12f915091f0af471d720e9e4730c1f827169ff890887113a1dc27c5ed33eaa25 |
|
MD5 | d0964fd8e53dfaa34e3c39027ed0ee72 |
|
BLAKE2b-256 | de83ac88d2840765b4df85e1ce785c8af01211f0bfb5834472c4180df8b786f7 |