cgq-qgc / pyhelp

A Python library for the assessment of spatially distributed groundwater recharge and hydrological components with HELP
MIT License
17 stars 5 forks source link

Petite erreur dans exemple pyhelp #94

Closed jnsebgosselin closed 2 years ago

jnsebgosselin commented 2 years ago

@FHuchet @mraynauld

J'ai trouvé une petite erreur dans le script exemple de pyhelp version 0.3.0 (ou moins) pour le calcul des cellules de type "eau de surface".

Lorsque l'on lance les calculs HELP pour un sous-bassin X, il est important de passer la liste des cellules de la grille associées à ce sous-bassin à la fonction pour calculer avec HELP, mais aussi aux cellules pour calculer les cellules eau.

Dans le fichier exemple de pyhelp version 0.3.0 et moins, la liste des cellules n'est pas passée à la fonction helpm.calc_surf_water_cells, ce qui veut dire que les calculs sont faits pour toutes les cellules eau de la zone d'étude au complet, ce qui va biaisé les débits totaux et de base obtenus pour le sous-bassin, car la proportion de cellules eau sera alors surestimée.

J'ai corrigé le tout dans l'exemple 0.3.1. Je suis vraiment désolé si cela vous cause des soucis.

C'est-à-dire:

image

jnsebgosselin commented 2 years ago

Idéalement, pour éviter ce genre d'erreur et simplifier d'avantage le workflow, il faudrait que les calculs pour les cellules eau et les calculs pour les cellules normale HELP soient fait dans une seule opération.

Malheureusement, je ne pense pas avoir le temps d'apporter ces modifications étant donné que l'on a un budget de temps relativement limité pour ce projet.

mraynauld commented 2 years ago

Si je comprends bien, il faut simplement ajouter 2 fois la ligne de commande cellnames =cellnames, Est-ce bien ça?

jnsebgosselin commented 2 years ago

Si je comprends bien, il faut simplement ajouter 2 fois la ligne de commande cellnames =cellnames, Est-ce bien ça?

Oui c'est cela. Lorsque l'on veut calculer pour un sous-bassin, il faut passer la liste de cellules associées au sous-bassin à calc_help_cells et à calc_surf_water_cells, sinon les calculs sont fait pour toutes les cellules de la grille.

FHuchet commented 2 years ago

Merci d'avoir vu cette petite erreur. Toutefois, je pensais que tes cellules de surface ne rentraient pas dans le calcul du bilan (comme indiqué dans ta documentation technique) ? Je me trompe peut-être. image

Ainsi, dans le graphe suivant, l'EVP ne devrait pas changer avec cette modification ? image

Cela changera seulement pour le graphe du calage de l'EVP avec le débit total car maintenant les cellules de surface sont incluses avec ta modification ce qui n'était pas le cas avant. Est-ce bien ça ?

jnsebgosselin commented 2 years ago

Merci d'avoir vu cette petite erreur. Toutefois, je pensais que tes cellules de surface ne rentraient pas dans le calcul du bilan (comme indiqué dans ta documentation technique) ? Je me trompe peut-être.

En effet, cela n'affectera pas les calculs du bilan.

Cela changera seulement pour le graphe du calage de l'EVP avec le débit total, car maintenant les cellules de surface sont incluses avec ta modification ce qui n'était pas le cas avant. Est-ce bien ça ?

Pas tout à fait. Les cellules eau sont incluses dans les calculs des débits et l'étaient avant. Je n'ai pas changé rien dans PyHELP en soit. Le problème était seulement dans l'exemple qui manquait un petit quelque chose pour être complet.

Si on ne passe pas la liste des cellules du sous-bassin à calc_surf_water_cells (comme c'était le cas avant dans l'exemple), alors les calculs sont faits pour toutes les cellules eau de la zone d'étude au complet et non juste pour le sous-bassin. Cela fait en sorte que la proportion de cellules eau sera surévaluées lors de la production des graphes de calage (considérant que le nombre de cellules eau de la zone d'étude est plus grand que celui du sous-bassin).

image

FHuchet commented 2 years ago

Parfait. Merci pour ces éclaircissements. :) Cela va juste retirer des cellules dans le graphe du calage, cela devrait avoir peu d'impact sur les résultats.

jnsebgosselin commented 2 years ago

Parfait. Merci pour ces éclaircissements. :) Cela va juste retirer des cellules dans le graphe du calage, cela devrait avoir peu d'impact sur les résultats.

Exact. Cela devrait en effet n'avoir qu'un impacti minimal sur les résultats.

mraynauld commented 2 years ago

Effectivement pour le cas de François, ça ne fera sans doute pas un gros effet étant donné que l'ajout de l'ensemble des cellules ne fait pas un gros poids par rapport au nombre de cellule du bassin calé. Par contre, pour l'Estrie ça fait une grosse différence car je cale sur des bassins d'environ 10000 cellules, mais l'ensemble de la zone d'étude fait 202000 celllules. Donc l'ajout des cellules Eau de toute la zone d'étude fait une grosse différence dans le calcul. C'est pourquoi mes premiers résultats étaient trop parfait... Merci beaucoup d'avoir ciblée cette erreur!!! Avant la correction: image

Après la correction: image

jnsebgosselin commented 2 years ago

Ah oui intéressant, ça fait quand même une bonne différence!

jnsebgosselin commented 2 years ago

J'ai pensé à un petit truc pour vous. Si vous voulez savoir combien de cellules de type "Eau" ont été prise en compte dans les calculs, vous pouvez tout simplement faire:

print(len(output_surf))

Juste un petit rappel, les cellules "Eau" sont celles pour lesquelles context=0.