Bonjour à tous.
Je bosse actuellement sur un code en Fortran de méca flu, que je vais peut être, à terme, porter en C++ pour des raisons de facilité de maintenance du code sur le long terme. Donc à chaque fois que j'implémente un truc, je me demande "mais comment je ferais pour implémenter ça efficacement en C++". L'un des trucs de base c'est le maillage adaptatif.
Globalement on a:
- des grosses cellules de niveau "coarse" (niveau de raffinement minimal)
- en fonction de la géométrie du problème, chaque cellule est divisé en cellules intermédiaires de plus petites tailles
- jusqu'à des cellules "feuilles" (niveau de raffinement maximal) qui contiennent des données physiques (pression, densité ...)
Comme ces éléments sont au coeur du calcul, il faut que l'implémentation soit murement réfléchie pour que cela soit le plus rapide possible.
Précision : comme c'est sur du long terme, je peux utiliser les nouvelles choses du C++1x.
Déjà au niveau des cellules feuilles (données et méthodes associées), je pense coder ça en template pour tirer partie de la métaprogrammation. Selon vous est-ce la meilleure méthode ?
Ensuite, pour des raisons d'analyses ultérieures, j'aurai besoin d'organiser ces cellules selon un arbre qui permette des recherches très rapides. La question est donc la suivante : quel conteneur (ou autre si il y a mieux) de la STL choisir pour faire cet arbre (je précise qu'à part std::vector, j'ai peu d'expérience avec les autres conteneurs). Globalement ce que je voudrai faire c'est un arbre un peu de cette façon :
qui permette de faire des recherches rapides mais dans les deux sens :
- top-down : je veux avoir des informations sur une région donnée : je sonde alors les infos en partant du raffinement minimal et je vais jusqu'au cellules feuilles
- down-top : je veux pouvoir faire par exemple une recherche sur le maximum de pression (P ici), et une fois que j'ai ce maximum, en déduire dans quelle région il est situé en remontant l'arbre en sens inverse
La question est donc la suivante : quel est la façon la plus efficace de procéder ? Je pense qu'il s'agit de stocker cela dans un conteneur de la STL, mais lequel ?
Merci beaucoup![]()
Partager