Principe de fonctionnement¶
PlatRock¶
PlatRock est une plate-forme multi-modèles et multi-interfaces pour la simulation numérique des chutes de blocs. C’est un outil scientifique qui met en oeuvre des codes de propagation des blocs sur des terrains bi-dimentionnels (modèle 2D) ou tri-dimentionnels (modèle 3D) afin d’obtenir des données statistiques sur les trajectoires. PlatRock dispose de deux interfaces utilisateur. L’interface en ligne de commande permet d’interagir avec une grande souplesse et des scripts de paramétrage. Elle est indispensable au développement et à l’automatisation des simulations lors d’études de sensibilité aux paramètres. L’interface graphique web est destinée aux utilisateurs ne souhaitant pas installer le code sur leur propre machine, et dispose d’une grande simplicité d’utilisation.
Simulations¶
La création d’un objet de type GenericSimulation
est le point de départ du code. Cette classe est d’une part un conteneur pour le terrain et les blocs propagés, mais permet également de définir l’ensemble des paramètres de la simulation (voir Fig. 3 et Fig. 5). La classe GenericSimulation
contient une méthode run()
qui sert à lancer la phase de calcul. La méthode run()
exécute successivement une liste des tâches nécessaires au bon déroulement des simulations : paramétrage préliminaire, boucle de calcul, stockage des données… (voir Fig. 1). La documentation nécessaire au paramétrage de la classe GenericSimulation
est accessible à la section Getting Started.
Fig. 1 Logigramme de la fonction run. À chaque tâche correspondent deux fonctions qui exécutent les actions : une fonction définie dans Common.Simulations.GenericSimulation
(actions communes à tous les modèles), et une fonction spécifique au modèle, définie dans [nom_du_modèle].Simulations.Simulation
.¶
Terrain et rugosité¶
Les objets de type terrain sont spécifiques à chaque modèle, ils contiennent les informations du sol et de la forêt avec lesquels les blocs interagissent. Le terrain est une succession contigüe de segments construite à partir d’un fichier csv pour le modèle 2D, et un ensemble de facettes triangulaires construit à partir d’un fichier raster pour le modèle 3D.
La rugosité du terrain modifie la pente locale de façon à ralentir la progression horizontale du bloc. Elle prend la forme d’un paramètre affecté à chaque élément de terrain qui détermine la rugosité maximale que peut subir le bloc. La rugosité effective ressentie par un bloc lors d’un rebond est choisie aléatoirement entre 0 et le paramètre de rugosité du segment. Ensuite, la pente est modifiée suivant [Bourrier2012] puis rapportée si nécessaire dans l’intervalle \(\left]-90°, +90°\right[\) (pas de dévers possible).
Modèles de rebonds bloc-terrain¶
Trois modèles de rebonds sont disponibles pour les modèles 2D et 3D :
modèle classique à coefficients de restitution
Common.BounceModels.Classical
, voir [Bourrier2011] ;modèle de Pfeiffer
Common.BounceModels.Pfeiffer
, voir [Pfeiffer1989] ;modèle de Bourrier
Common.BounceModels.Bourrier
, voir [Bourrier2012].
Lors d’un contact bloc-terrain, ils modifient la vitesse du bloc en fonction de son angle d’incidence et des paramètres du sol. La figure Fig. 2 décrit les paramètres d’entrée des modèles, et ce tableau récapitule la dépendance des modèles aux paramètres d’entrée.
Fig. 2 Fonctionnement des modèles de rebond.¶
Modèle de rebond bloc-arbre¶
Lors d’un contact bloc-arbre, à l’exception du modèle 3D avec moteur physique Siconos, la vitesse de translation du bloc est modifiée en se basant sur des grilles de résultats obtenus par D.Toe. Les grilles ont été obtenues par modélisation par la méthode des élements discrets, la méthode est décrite dans [Toe2017]. Les paramètres d’entrée du modèle de rebond bloc-arbre sont : la norme de la vitesse du bloc, l’excentricité du contact, l’angle d’incidence vertical, le volume du bloc et le diamètre de l’arbre. L’excentricité n’étant pas définie pour le modèle 2D, elle est tirée uniformément au hasard entre 0 et 1. De même, la composante de déviation de la vitesse de sortie (\(v_y\)) du modèle est ignorée pour le modèle 2D.
Données de sortie¶
L’enregistrement des données de propagation est pris en charge par la classe Common.Outputs.Output
. Un objet de type Output
est donc créé automatiquement avant chaque démarrage de simulation, il est accessible via l’attribut Common.Simulations.GenericSimulation.output
. Lors de la simulation, les données de importantes de trajectoire et de rebonds y sont stockées. Il est possible en fin de simulation d’y accéder via les fonctions :
Common.Outputs.Output.get_contacts_pos()
: liste des postitions des contacts pour le bloc n°idCommon.Outputs.Output.get_contacts_vels()
: liste des vitesses de sortie des contacts pour le bloc n°idCommon.Outputs.Output.get_contacts_angVels()
: liste des vitesses angulaires de sortie des contacts pour le bloc n°idCommon.Outputs.Output.get_contacts_normals()
: liste des normales des plan de contacts pour le bloc n°idCommon.Outputs.Output.get_contacts_types()
: liste des types de contacts pour le bloc n°id (0=position initiale, 1=bloc-terrain, 2=bloc-arbre)
Lorsqu’une simulation est terminée, il est possible de créer automatiquement des fichiers qui synthétisent les résultats :
Common.Outputs.Output.write_to_h5()
: commune à tous les modèles, cette méthode écrit le détail des trajectoires dans un fichier au format hdf5.TwoD.Simulations.Simulation.results_to_zipfile()
: pour le modèle 2D, cette méthode écrit une archive contenant les distances d’arrêt et des informations aux points de passageThreeD.Simulations.Simulation.results_to_zipfile()
: pour le modèle 3D, cette méthode écrit une archive contenant des raster de nombre de passages, de vitesses et de hauteur.
Modèle 2D¶
Principes généraux¶
Le modèle 2D permet de propager des blocs successivement le long d’un terrain bidimensionnel. Les blocs sont conceptualisés par des points matériels possédant des propriétés physiques : densité, volume, position, vitesses, inertie. Le terrain est constitué d’un ensemble de segments joints dont la pente est comprise dans l’intervalle \(\left]-90°, +90°\right[\) . Les blocs interagissent avec les segments via des rebonds, régis par des lois de rebonds qui modifient les vitesses des blocs en fonction des paramètres locaux du sol. Des paramètres de sol sont définis pour chaque segment, permettant de prendre en compte des propriétés de sol non homogènes le long du terrain. Entre chaque rebond et en l’absence de forêt, un bloc est uniquement soumis à son poids : il évolue en chute libre, suivant une trajectoire parabolique jusqu’au prochain rebond. La présence de la forêt est également paramétrable pour chaque segment via une densité et un diamètre moyen d’arbres. Un algorithme calcule la position du prochain impact bloc - arbre le long de la trajectoire parabolique du bloc. L’approche est probabiliste, ce qui signifie que les arbres ne sont pas localisés à priori pour tous les blocs (les informations sur la présence ou non d’arbre, ainsi que leurs positions le cas échéant, sont déterminées lors de chaque rebond, voir Fig. 4 pour plus de détails sur l’implémentation). Lorsque l’impact a lieu, les vitesses du bloc sont modifiées suivant le modèle décrit ci-dessus, sa trajectoire parabolique est par conséquence modifiée. Le bloc poursuit le mouvement de chute libre (altéré par la présence de la forêt) jusqu’au prochain contact bloc - terrain ou bloc - arbre. Lorsque la vitesse de translation d’un bloc est inférieure à un critère fixé, il s’arrête définitivement et le prochain bloc est lancé.
Paramétrage d’une simulation¶
La construction d’une simulation avec le modèle 2D est décrite dans la rubrique TwoD Model. Les principaux éléments sont (voir Fig. 3):
L’instanciation du terrain (
TwoD.Objects.Terrain
), construit à partir d’un fichier externe de type csv. Il contient les informations sur les segments : positions, choix des modèles de rebond et paramètres des rebonds. La spécification précise du formatage de ce fichier de terrain est disponible dans la documentation du code :TwoD.Objects.Terrain
, et la dépendance des modèles de rebonds aux paramètres (les colonnes) est disponible ici.L’instanciation de la simulation de type
TwoD.Simulations.Simulation
, prenant en paramètre le terrain et les paramètres de départ des blocs.Les simulations peuvent contenir des objets
TwoD.Objects.Checkpoint
: ce sont des points d’évaluations verticaux auxquels sont stockés les informations sur les blocs qui les ont traversés : nombre de blocs, hauteurs de passage, vitesses de translation et de rotation.Si les données du terrain comportent la densité d’arbres (arbres/hectare) et le DHP moyen (diamètre à hauteur de poitrine), la prise en compte de la forêt peut être activée pour les segments concernés.
L’appel de la méthode
TwoD.Simulations.Simulation.run()
Diagrammes de fonctionnement du code¶
Fig. 3 Représentation schématique du paramétrage d’une simulation 2D.¶
Fig. 4 Logigramme de l’algorithme de propagation des blocs du modèle 2D.¶
Modèle 3D¶
Principes généraux¶
Le modèle 3D permet de propager des blocs successivement le long d’un terrain représenté par une surface triangulée tridimensionnelle. Deux types de sous-modèles 3D coexistent en fonction des besoins de l’utilisateur, ils mettent tous deux en oeuvre le principe de contacts rigides, c’est à dire non élastiques :
Le sous-modèle PlatRock, où les blocs sont conceptualisés par des sphères possédant un volume, une densité, une position, des vitesses et une inertie.
Le sous-modèle Siconos, où les blocs sont conceptualisés par des parallélépipèdes rectangles possédant une densité, une position, des vitesses, une inertie. Les trois longueurs principales des parallélépipèdes sont paramétrables par l’utilisateur.
Le terrain est constitué d’un ensemble de faces
triangulaires jointes par leurs arrêtes dont la composante verticale (\(z\)) de la normale est positive (dévers impossible). Pour le sous-modèle PlatRock, le déplacement des blocs est permis par l’intégration en temps des équations du mouvement. Un pas de temps \(\Delta t\) est donc défini et les positions successives des blocs sont calculées aux temps \(t_n=t_0 + n \Delta t\). Les blocs interagissent avec les faces via les modèles de rebonds, qui modifient leurs vitesses en fonction des paramètres locaux du sol et des vitesses incidentes du bloc (voir Modèles de rebonds bloc-terrain). Pour le sous-modèle Siconos, les détails sont disponibles dans la documentation officielle. Entre chaque rebond et en l’absence de forêt, un bloc est uniquement soumis à son poids : il évolue en chute libre, suivant une trajectoire parabolique jusqu’au prochain rebond. La présence de la forêt est prise en compte par un algorithme déterministe : les arbres sont localisés c’est à dire qu’ils sont positionnés en début de simulation. De cette manière, tous les blocs évoluent dans le même paysage forestier. Pour le sous-modèle PlatRock, lorsqu’un impact bloc-arbre a lieu, les vitesses du bloc sont modifiées suivant le modèle décrit ci-dessus. La trajectoire parabolique du bloc est par conséquent modifiée puis le bloc poursuit un autre mouvement de chute libre jusqu’au prochain contact bloc - terrain ou bloc - arbre. Pour le sous-modèle Siconos, les arbres sont représentés par des cylindres indéformables et le rebond est géré commme un contact rigide, de la même manière qu’un rebond bloc-terrain. Lorsque la vitesse de translation d’un bloc est inférieure à un critère fixé, il s’arrête définitivement et le prochain bloc est lancé.
Paramétrage d’une simulation¶
La construction d’une simulation avec le modèle 3D est décrite dans la rubrique ThreeD Model (spherical rocks, PlatRock engine). Les principaux éléments sont (voir Fig. 5):
L’instanciation du terrain (
ThreeD.Objects.Terrain
), construit à partir d’un fichier externe de type raster (.asc) qui contient les hauteurs des cellules. Dans la mémoire, ce fichier est converti en un ensemble contigu de triangles (faces) liées par leurs arêtes. Le fichier de raster doit être accompagné d’un fichier au format shapefile : des polygônes comportant des paramètres de sol sont lus et appliqués aux faces du terrain ; la dépendance des modèles de rebonds aux paramètres (les attributs des polygônes) est disponible ici.La création d’un objet de type
ThreeD.Simulations.Simulation
, qui permet notemment de définir l’ensemble des paramètres de la simulation. Un fichier au format shapefile doit être spécifié, il contient des polygones comportant les paramètres de départ des blocs (les paramètres à fournir sont listés ici en fonction du sous-modèle choisi). Il est également obligatoire de fournir la listeThreeD.Simulations.Simulation.engines
qui contient des objets de typeThreeD.Engines.Engine
. Il convient de la remplir par une série d’actions (engines) réalisées à chaque boucle de calcul. Pour le sous-modèle Siconos, cette liste doit contenir simplement un objet de typeThreeD.Engines.Siconos
. Pour le modèle PlatRock, la liste minimale pour le bon fonctionnement est :Verlet_update
: il s’agit de l’optimisation dite de liste de Verlet, qui permet de restreindre la détection des contacts bloc-face et bloc-arbre aux éléments les plus proches. Une liste d’éléments voisins au bloc est périodiquement constituée, puis les contacts effectifs sont détectés dans cette liste à chaque itération.Contacts_detector
: détecter les contacts bloc-terrain et bloc-arbre et en dresser une liste.Rock_terrain_nscd_basic_contact
: modifier les vitesses du bloc si un contact bloc-terrain a lieu.Rock_tree_nscd_basic_contact
: modifier les vitesses du bloc si un contact bloc-arbre a lieu.Nscd_integrator
: permet de déplacer et faire tourner le bloc en fonction de ses vitesses.
Un
générateur de forêt
est disponible afin de générer aléatoirement une population d’arbres en spécifiant la densité en arbres/hectare et le diamètre à hauteur de poitrine moyen.
Post-traitement¶
La prise en compte du terrain comme une surface triangulée n’est pas directement compatible avec le format de sortie raster généralement utilisé. Le module de post-traitement
permet de convertir les données de contact des blocs exprimées dans un espace cartésien continu vers un espace discret de type raster. Il est donc possible de définir à postériori la taille des cellules du raster afin de construire les données de sortie standarisées. Le module de postprocessing est lié à la librairie graphique matplotlib, permettant l’affichage des données raster des passages de blocs (nombre de passages, vitesses, hauteurs).
Diagrammes de fonctionnement du code¶
Fig. 5 Représentation schématique du paramétrage d’une simulation 3D.¶
Fig. 6 Logigramme de l’algorithme de propagation des blocs du modèle 3D.¶