wolfhece.hydrology.PyWatershed

Author: HECE - University of Liege, Pierre Archambeau, Christophe Dessers Date: 2024

Copyright (c) 2024 University of Liege. All rights reserved.

This script and its content are protected by copyright law. Unauthorized copying or distribution of this file, via any medium, is strictly prohibited.

Module Contents

wolfhece.hydrology.PyWatershed.LISTDEM = ['dem_before_corr', 'dem_after_corr', 'dem_10m', 'dem_20m', 'crosssection'][source]
class wolfhece.hydrology.PyWatershed.Node_Watershed[source]

Noeud du modèle hydrologique maillé

i: int[source]
j: int[source]
x: float[source]
y: float[source]
index: int[source]
dem: dict[str, float][source]
demdelta: float[source]
crosssections: list[source]
time: float[source]
slope: float[source]
sloped8: float[source]
slopecorr: dict[source]
demcorr: dict[source]
river: bool[source]
reach: int[source]
sub: int[source]
forced: bool[source]
uparea: float[source]
strahler: int[source]
reachlevel: int[source]
cums: float[source]
incrs: float[source]
down: Node_Watershed[source]
up: list[Node_Watershed][source]
upriver: list[Node_Watershed][source]
flatindex: int[source]
incr_curvi()[source]

Incrémentation de la longueur curviligne

mean_slope_up(threshold: float) float[source]

Pente moyenne sur depuis les mailles amont

slope_down(threshold: float) float[source]

Recherche d’une pente supérieure à un seuil Parcours vers l’aval

slope_upriver(threshold: float) float[source]

Recherche d’une pente supérieure à un seuil Parcours vers l’amont uniquement selon les rivières

set_strahler(strahler: int)[source]
distance(x: float, y: float) float[source]

Distance euclidienne

get_up_nodes(excluded_node: list[Node_Watershed] = [])[source]

Get all upstream nodes

get_up_nodes_same_sub(excluded_node: list[Node_Watershed] = [])[source]

Get all upstream nodes in the same sub-basin

get_up_runoff_nodes()[source]

Get all upstream runoff nodes

get_up_runoff_nodes_same_sub()[source]

Get all upstream runoff nodes in the same sub-basin

get_up_rivernodes()[source]

Get all upstream river nodes

get_up_rivernodes_same_sub()[source]

Get all upstream river nodes in the same sub-basin

get_up_reaches_same_sub() list[int][source]

Get all upstream reaches in the same sub-basin

get_down_reaches_same_sub() list[int][source]

Get all downstream reaches in the same sub-basin

get_down_nodes()[source]

Get all downstream nodes

get_down_nodes_same_sub()[source]

Get all downstream nodes in the same sub-basin

class wolfhece.hydrology.PyWatershed.RiverSystem(rivers: list[Node_Watershed], parent: Watershed, thslopemin: float, thslopemax: float, savedir: str = '', computecorr: bool = False, *args, **kwargs)[source]

Classe du réseau de rivières d’un modèle hydrologique WOLF

nbreaches: int[source]
reaches: dict[source]
kdtree: scipy.spatial.KDTree[source]
upmin: dict[source]
upmax: dict[source]
parent: Watershed[source]
upstreams: dict[source]
maxlevels: int[source]
maxstrahler: int[source]
tslopemin: float[source]
tslopemax: float[source]
plotter: wolfhece.GraphNotebook.PlotNotebook[source]
savedir: str[source]
init_kdtree(nodes: list[Node_Watershed])[source]

Create a KDTree structure from coordinates

get_nearest_nodes(xy: wolfhece.hydrology.read.np.ndarray | wolfhece.wolf_array.vector, nb: int = 1) tuple[wolfhece.hydrology.read.np.ndarray | float, list[Node_Watershed] | Node_Watershed][source]

Return the distance and the nearest Node_Watershed

:param xy = np.ndarray - shape (n,2) :param nb = number of neighbors

return

get_nodes_in_reaches(reaches: list[int]) list[Node_Watershed][source]

Get nodes in a reaches

get_downstream_node_in_reach(reach: int) Node_Watershed[source]

Get downstream node in a reach

get_upstream_node_in_reach(reach: int) Node_Watershed[source]

Get upstream node in a reach

get_downstream_reaches(node: Node_Watershed) list[int][source]

Get index of downstream reaches

get_kdtree_downstream(node: Node_Watershed) tuple[list[Node_Watershed], scipy.spatial.KDTree][source]

Get KDTree of downstream reaches

get_kdtree_from_reaches(reaches: list[int]) tuple[list[Node_Watershed], scipy.spatial.KDTree][source]

Get KDTree from a list of reaches

get_downstream_reaches_excluded(node: Node_Watershed, excluded: list[int]) list[int][source]

Get index of downstream reaches, excepted the excluded ones

go_downstream_until_reach_found(node: Node_Watershed, reach: int | list[int]) Node_Watershed[source]

Go downstream until a reach is found

get_cums(whichreach: int = None, whichup: int = None)[source]

Récupération de la position curvi

get_dem(whichdem: str, whichreach: int = None, whichup: int = None)[source]

Récupération de l’altitude pour une matrice spécifique

get_dem_corr(whichdem: str, whichreach: int = None, whichup: int = None)[source]

Récupération de l’altitude corrigée pour une matrice spécifique

get_slope(whichslope: str = None, whichreach: int = None, whichup: int = None)[source]

Récupération de la pente

get_upstreams_coords()[source]

Récupération des coordonnées des amonts

get_nearest_upstream(xy: wolfhece.hydrology.read.np.ndarray, nb: int) tuple[wolfhece.hydrology.read.np.ndarray, list[Node_Watershed]][source]

Recherche des amonts les plus proches

create_index()[source]

Incrément d’index depuis l’amont jusque l’exutoire final Parcours des mailles rivières depuis tous les amonts et Incrémentation d’une unité Résultat :

  • tous les biefs en amont sont à 1

  • Les autres biefs contiennent le nombre de biefs en amont

Indice de Strahler

set_strahler_in_nodes(whichreach: int, strahler: int)[source]

Mise à jour de la propriété dans chaque noeud du bief

plot_dem(which: int = -1)[source]

Graphiques

plot_dem_and_corr(which: int = -1, whichdem: str = 'dem_after_corr')[source]

Graphiques

plot_slope(which: int = -1)[source]

Graphiques

write_slopes()[source]

Ecriture sur disque

slope_correctionmin()[source]

Correction pente minimale

slope_correctionmax()[source]

Correction pente maximale

selectmin()[source]

Sélection des valeurs minimales afin de conserver une topo décroissante vers l’aval –> une pente positive

selectmax()[source]

Sélection des valeurs maximales afin de conserver une topo décroissante vers l’aval –> une pente positive

compute_slopescorr(whichdict: dict)[source]

Calcul des pents corrigées

compute_slope_down(x, y)[source]

Calcul de pente sur base de x et y

plot_all_in_notebook()[source]

Graphiques

class wolfhece.hydrology.PyWatershed.RunoffSystem(runoff: list[Node_Watershed], parent: Watershed, thslopemin: float = None, thslopemax: float = None, computecorr: bool = False, *args, **kwargs)[source]

Classe de l’ensemble des mailles de ruissellement d’un modèle hydrologique WOLF

nodes: list[Node_Watershed][source]
parent: Watershed[source]
upstreams: dict[source]
tslopemin: float[source]
tslopemax: float[source]
upmin: dict[source]
upmax: dict[source]
get_oneup(idx: int) Node_Watershed[source]

Récupération d’un amont sur base de l’index

get_cums(whichup: int = None)[source]
get_dem(whichdem: str, whichup: int = None)[source]
get_dem_corr(whichdem: str, whichup: int = None)[source]
get_slope(whichslope: str = None, whichup: int = None)[source]
plot_dem(which: int = -1)[source]
plot_dem_and_corr(which: int = -1, whichdem: str = 'dem_after_corr')[source]
write_slopes()[source]
slope_correctionmin()[source]
slope_correctionmax()[source]
selectmin()[source]
selectmax()[source]
compute_slopescorr(whichdict: dict)[source]
compute_slope_down(x, y)[source]

Calcul de la pente sur base de listes X et Y

class wolfhece.hydrology.PyWatershed.SubWatershed(parent: Watershed, name: str, idx: int, mask: wolfhece.wolf_array.WolfArray, nodes: list[Node_Watershed], runoff: list[Node_Watershed], rivers: list[Node_Watershed])[source]

Classe sous-bassin versant

property is_virtual: bool[source]

Vérification si le sous-bassin est virtuel

property surface: float[source]

Surface du bassin versant en m²

property area: float[source]

Surface du bassin versant en km²

property area_outlet: float[source]

Surface du bassin à l’exutoire

property outlet: Node_Watershed[source]

Outlet of the subbasin

is_reach_in_sub(idx_reach: int) bool[source]

Vérification si un bief est dans le sous-bassin

is_in_rivers(node: Node_Watershed) bool[source]

Vérification si un noeud est dans les rivières

get_list_nodes_river(idx_reach: int) list[Node_Watershed][source]

Récupération des noeuds d’une rivière

get_nearest_river(x, y) Node_Watershed[source]

Récupération du noeud de rivière le plus proche

get_max_area_in_reach(idx_reach: int) float[source]

Récupération de la surface maximale dans un bief

get_min_area_in_reach(idx_reach: int) float[source]

Récupération de la surface minimale dans un bief

get_min_area_along_reaches(reaches: list[int], starting_node: Node_Watershed = None) float[source]

Aire drainée à la limite amont du ss-bassin

get_up_rivernode_outside_sub(starting_node: Node_Watershed, reaches: list[int]) Node_Watershed[source]

Récupération du noeud de rivière en amont du sous-bassin

get_area_outside_sub_if_exists(starting_node: Node_Watershed, reaches: list[int]) float[source]

Aire drainée en amont du sous-bassin

get_river_nodes_from_upareas(min_area: float, max_area: float) list[Node_Watershed][source]

Récupération des noeuds de rivière entre deux surfacesde BV.

Les surfaces sont exprimées en km².

Les bornes sont incluses.

Parameters:
  • min_area – surface minimale

  • max_area – surface maximale

is_in_subwatershed(vec: wolfhece.wolf_array.vector) bool[source]

Vérification si un vecteur est dans le sous-bassin

filter_zones(zones_to_filter: wolfhece.wolf_array.Zones, force_virtual_if_any: bool = False) list[wolfhece.wolf_array.vector][source]

Filtrage des zones pour ne garder que celle se trouvant dans le sous-bassin

get_virtual_subwatershed(outlet: Node_Watershed, excluded_nodes: list[Node_Watershed] = []) SubWatershed[source]

Création d’un sous-bassin virtuel sur base d’une maille rivière aval

get_downstream_node_in_reach(reach: int) Node_Watershed[source]

Récupération du noeud aval dans un bief

class wolfhece.hydrology.PyWatershed.Watershed(dir: str, thzmin: float = None, thslopemin: float = None, thzmax: float = None, thslopemax: float = None, crosssections: wolfhece.PyCrosssections.crosssections = None, computestats: bool = False, computecorr: bool = False, plotstats: bool = False, plotriversystem=False, dir_mnt_subpixels: str = None, *args, **kwargs)[source]

Classe bassin versant

property nb_subs[source]
property resolution[source]
property crosssections[source]
header: wolfhece.wolf_array.header_wolf[source]
dir: str[source]
outlet: Node_Watershed[source]
subs_array: wolfhece.wolf_array.WolfArray[source]
nodes: list[Node_Watershed][source]
nodesindex: wolfhece.hydrology.read.np.ndarray[source]
rivers: list[Node_Watershed][source]
runoff: list[Node_Watershed][source]
couplednodes: list[source]
subcatchments: list[SubWatershed][source]
virtualcatchments: list[SubWatershed][source]
statisticss: dict[source]
couplednodesxy: list[float, float, float, float][source]
couplednodesij: list[tuple[int, int], tuple[int, int]][source]
riversystem: RiverSystem[source]
runoffsystem: RunoffSystem[source]
to_update_times: bool[source]
set_names_subbasins(new_names: list[tuple[int, str]])[source]

Renommage des sous-bassins

add_virtual_subwatershed(subwater: SubWatershed)[source]

Ajout d’un sous-bassin virtuel

create_virtual_subwatershed(outlet: Node_Watershed, excluded_nodes: list[Node_Watershed] = [])[source]

Création d’un sous-bassin virtuel

get_xy_downstream_node(starting_node: Node_Watershed, limit_to_sub: bool = False)[source]

Récupération des coordonnées du noeud aval

get_xy_upstream_node(starting_node: Node_Watershed, limit_to_sub: bool = False, limit_to_river: bool = False, limit_to_runoff: bool = False) list[list[float]][source]

Récupération des coordonnées des noeuds amont

get_array_from_upstream_node(starting_node: Node_Watershed, limit_to_sub: bool = False)[source]

Récupération de l’array à partir d’un noeud amont

get_vector_from_upstream_node(starting_node: Node_Watershed, limit_to_sub: bool = False)[source]

Return a vector contouring the upstream area

get_subwatershed(idx_sorted_or_name: int | str) SubWatershed[source]

Récupération d’un sous-bassin sur base de l’index trié

get_node_from_ij(i: int, j: int)[source]

Récupération d’un objet Node_Watershed sur base des indices (i,j)

get_node_from_xy(x: float, y: float)[source]

Récupération d’un objet Node_Watershed sur base des coordonnées (x,y)

write_slopes()[source]

Ecriture sur disque

write_dem()[source]

Ecriture sur disque

attrib_cs_to_nodes()[source]

Attribution des sections en travers aux noeuds

init_nodes()[source]

Initialisation des noeuds

find_rivers(whichsub: int = 0, whichreach: int = 0) tuple[list[Node_Watershed], Node_Watershed][source]

Recherche des mailles rivières :param whichsub : numéro du sous-bassin à traiter :param whicreach : numéro du tronçon à identifier

find_sub(whichsub: int = 0) list[Node_Watershed][source]

Recherche des mailles du sous-bassin versant :param whichsub : numéro du sous-bassin à traiter

init_subs()[source]

Initialize Sub-Catchments

find_runoffnodes(whichsub: int = 0) list[Node_Watershed][source]

Recherche des mailles du bassin versant seul (sans les rivières) :param whichsub : numéro du sous-bassin à traiter

index_flatzone(listofsortednodes: list, threshold: float)[source]

Indexation des zones de plat

find_flatnodes(listofsortednodes: list)[source]

Recherche des mailles dans des zones de faibles pentes :param listofsortednodes : liste triée de mailles

find_flatzones(listofsortednodes: list, maxindex: int)[source]

Recherche des mailles dans des zones de faibles pentes :param listofsortednodes : liste triée de mailles

find_dem_subpixels()[source]

Recherche des altitudes dans un mnt plus dense

compute_stats(plot: bool = False)[source]

Calcul des statistiques de pente

plot_stats()[source]
analyze_flatzones()[source]

Analyse des zones de plat

update_times(wolf_time=None)[source]
get_subwatershed_from_ij(i: int, j: int) SubWatershed[source]

Récupération d’un sous-bassin sur base des indices (i,j)

Returns:

SubWatershed : sous-bassin or None

get_subwatershed_from_xy(x: float, y: float) SubWatershed[source]

Récupération d’un sous-bassin sur base des coordonnées (x,y)

Returns:

SubWatershed : sous-bassin or None

get_subwatershed_from_vector(vec: wolfhece.wolf_array.vector) tuple[SubWatershed, bool, list[SubWatershed]][source]

Récupération d’un sous-bassin sur base d’un vecteur.

Recherche sur base du centroid du vecteur

Parameters:

vec – vecteur

Returns:

tuple(SubWatershed, bool, list[SubWatershed]) : sous-bassin, entièrement dans le sous-bassin, autres sous-bassins