Skip to main content

A Python package to perform climate downscaling at the hillslope scale

Project description

DOI GitHub license GitHub release (latest by date)

TopoPyScale

Python version of Toposcale packaged as a Pypi library. Toposcale is an original idea of Joel Fiddes to perform topography-based downscaling of climate data to the hillslope scale.

Documentation avalaible: https://topopyscale.readthedocs.io

References:

  • Fiddes, J. and Gruber, S.: TopoSCALE v.1.0: downscaling gridded climate data in complex terrain, Geosci. Model Dev., 7, 387–405, https://doi.org/10.5194/gmd-7-387-2014, 2014.
  • Fiddes, J. and Gruber, S.: TopoSUB: a tool for efficient large area numerical modelling in complex topography at sub-grid scales, Geosci. Model Dev., 5, 1245–1257, https://doi.org/10.5194/gmd-5-1245-2012, 2012.

Kristoffer Aalstad has a Matlab implementation: https://github.com/krisaalstad/TopoLAB

Contribution Workflow

Please follow these simple rules:

  1. a bug -> fix it!
  2. an idea or a bug you cannot fix? -> create a new issue if none doesn't already exist. If one exist, then add material to tit.
  3. wanna develop a new feature/idea? -> create a new branch. Do the development. Merge with main branch when accomplished.
  4. Create release version when significant improvements and bug fixes have been done. Coordinate with others

Create a new release: Follow procedure and conventions described in: https://www.youtube.com/watch?v=Ob9llA_QhQY

And check out our Slack: tscaleworkspace.slack.com

Contributors to the current version (2021) are:

  • Simon Filhol
  • Joel Fiddes
  • Kristoffer Aalstad

Design

  1. Inputs
    • Climate data from reanalysis (ERA5, etc)
    • Climate data from future projections (CORDEX) (not avail.)
    • DEM from local source, or fetch from public repository: SRTM, ArcticDEM, ASTER
  2. Run TopoScale
    • compute derived values (from DEM)
    • toposcale (k-mean clustering)
    • interpolation (bilinear, inverse square dist.)
  3. Output
    • Cryogrid format
    • FSM format
    • CROCUS format
    • Snowmodel format
    • basic netcfd
    • For each method, have the choice to output either the abstract cluster points, or the gridded product after interpolation
  4. Validation toolset
    • validation to local observation timeseries
    • plotting
  5. Gap filling algorithm
    • random forest temporal gap filling

Validation (4) and Gap filling (4) are future implementation.

Installation

conda create -n downscaling python=3.8 ipython
conda activate downscaling

# Recomended way to install dependencies:
conda install -c conda-forge xarray matplotlib scikit-learn pandas numpy netcdf4 h5netcdf rasterio pyproj dask

# OPTION 1 (Pypi release):
pip install TopoPyScale

# OPTION 2 (development):
cd github  # navigate to where you want to clone TopoPyScale
git clone git@github.com:ArcticSnow/TopoPyScale.git
pip install -e TopoPyScale    #install a development version

#----------------------------------------------------------
#            OPTIONAL: if using jupyter lab
# add this new Python kernel to your jupyter lab PATH
python -m ipykernel install --user --name downscaling

# Tool for generating documentation from code docstring
pip install lazydocs

Then you need to setup your cdsapi with the Copernicus API key system. Follow this tutorial after creating an account with Copernicus. On Linux, create a file nano ~/.cdsapirc with inside:

url: https://cds.climate.copernicus.eu/api/v2
key: {uid}:{api-key}

Basic usage

  1. Setup your Python environment
  2. Create your project directory
  3. Configure the file config.ini to fit your problem (see config.yml for an example)
  4. Run TopoPyScale
import pandas as pd
from TopoPyScale import topoclass as tc
from matplotlib import pyplot as plt

# ========= STEP 1 ==========
# Load Configuration
config_file = './config.yml'
mp = tc.Topoclass(config_file)
# Compute parameters of the DEM (slope, aspect, sky view factor)
mp.compute_dem_param()

# ========== STEP 2 ===========
# Extract DEM parameters for points of interest (centroids or physical points)

mp.extract_topo_param()

# ----- Option 1:
# Compute clustering of the input DEM and extract cluster centroids
#mp.extract_dem_cluster_param()
# plot clusters
#mp.toposub.plot_clusters_map()
# plot sky view factor
#mp.toposub.plot_clusters_map(var='svf', cmap=plt.cm.viridis)

# ------ Option 2:
# inidicate in the config file the .csv file containing a list of point coordinates (!!! must same coordinate system as DEM !!!)
#mp.extract_pts_param(method='linear',index_col=0)

# ========= STEP 3 ==========
# compute solar geometry and horizon angles
mp.compute_solar_geometry()
mp.compute_horizon()

# ========= STEP 4 ==========
# Perform the downscaling
mp.downscale_climate()

# ========= STEP 5 ==========
# explore the downscaled dataset. For instance the temperature difference between each point and the first one
(mp.downscaled_pts.t-mp.downscaled_pts.t.isel(point_id=0)).plot()
plt.show()

# ========= STEP 6 ==========
# Export output to desired format
mp.to_netcdf()

TopoClass will create a file structure in the project folder (see below). TopoPyScale assumes you have a DEM in GeoTiFF, and a set of climate data in netcdf (following ERA5 variable conventions). TopoPyScale can easier segment the DEM using clustering (e.g. K-mean), or a list of predefined point coordinates in pts_list.csv can be provided. Make sure all parameters in config.ini are correct.

my_project/
    ├── inputs/
        ├── dem/ 
            ├── my_dem.tif
            └── pts_list.csv  (optional)
        └── climate/
            ├── PLEV*.nc
            └── SURF*.nc
    ├── outputs/
    └── config.ini

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

topopyscale-0.2.1.tar.gz (3.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

topopyscale-0.2.1-py3-none-any.whl (66.7 kB view details)

Uploaded Python 3

File details

Details for the file topopyscale-0.2.1.tar.gz.

File metadata

  • Download URL: topopyscale-0.2.1.tar.gz
  • Upload date:
  • Size: 3.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for topopyscale-0.2.1.tar.gz
Algorithm Hash digest
SHA256 699cf56ad5f031fbd3169cf35c8f76cac8d74fb79ee780d42f7591fd534797a0
MD5 c84d8932b01914a6dac222b375fddd58
BLAKE2b-256 ce2b798836e9ba8a30d9b40493c1b8eef29531750fa29ea1e8bdd6db853083e7

See more details on using hashes here.

File details

Details for the file topopyscale-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: topopyscale-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 66.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for topopyscale-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bcc298aa9af7cb09bf2cc70cd050b1ecb761352ea0ef6ce312c4d2b059c478a0
MD5 80d5c6e0943e2df2df100b91b1af6dda
BLAKE2b-256 d6df9c574f83bd01b48c4415553f5df5f7029a40209f4aacb3451c6c1505e036

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page