Projection de champs

1. Présentation du problème

Un écueil courant lors de la résolution de problèmes avec des physiques multiples est que l’utilisation de plusieurs outils entraîne souvent la création de maillages différents (voir la figure ci-dessous). Il s’agit alors de projeter les champs sur une grille commune afin de pouvoir réaliser des calculs en un même point de l’espace pour les deux grandeurs calculées.

Différence de maillage entre l’outil pour le calcul des flux solaires et des vitesses d’air sur une géométrie.

Dans la section qui suit, on présente un outil mathématique permettant de projeter un champ sur un autre, régulier au non.

 

2. Méthodes de projection

Il existe plusieurs algorithmes de complexité variable pour réaliser une projection de champ. On en présente quelques variantes dans cette section.

2.1. Les plus proches voisins

Une technique pour projeter un champ sur l’autre consiste à résoudre un problème de minimisation. On explicite ici la méthode succincte donnée dans code Aster en dimension deux pour l’algorithme des plus proches voisins.

Il s’agit de projeter un nuage de points N portant un champ \varphi sur un ensemble de points M différent de N. Appelons \psi la projection de \varphi sur M.

Deux nuages de points N et M, respectivement initial et de projection

Pour chaque point k appartenant à M de coordonnées (x_k,y_k), on cherche ses n plus proches voisins appartenant à N, ainsi qu’illustré sur la Figure qui suit.

Illustrations des n=5 plus proches voisins du point k

La valeur du champ sur le point projeté \psi_k est calculée avec les coefficients a_k,b_k,c_k de sorte que :

\psi_k = a_k + b_k x_k + c_k y_k

Il s’agit donc de trouver, pour l’ensemble des points k du nuage M, les vecteurs [a_k], [b_k], [c_k] des coefficients qui minimisent la distance entre le champ projeté \psi et le champ \varphi. Ainsi, pour tout point k du nuage M on cherche à minimiser les moindres carrés \varepsilon_k entre la fonction \psi_k et le champ \varphi_i sur les n plus proches voisins du point :

\varepsilon_k = \sum_{i=1}^{n} w(d_i) \big(\psi_k-\varphi_i \big)^2

Où la fonction de pondération w(d_i) dépend de la distance d_i entre le point (x_i,y_i) du nuage initial et le point k de la grille de projection (x_k,y_k) :

w(d_i) = e^{-(\frac{d_i}{d_{r}})^\beta}

Avec :
d_i est la distance (i-k) soit d_i=\sqrt{(x_i-x_k)^2+(y_i-y_k)^2},
d_r est la distance de référence du maillage. Celle-ci est définie comme le rayon du plus petit cercle centré en un point de M contenant trois points du nuage N, comme illustré sur la figure ci-après (on pourra déterminer ce rayon avec un kdtree du package scipy par exemple). En première approximation on peut prendre d_r \sim \frac{\Delta x}{2}, avec \Delta x la distance moyenne entre deux points du nuage.

Illustration de la distance de référence d_r.

 

Le choix du jeu de paramètres (n,M,\beta,d_{r}) est également influent : selon la distance entre points du maillage il convient d’avoir un nombre de points de projection M suffisants, tout en gardant à l’esprit que la durée de calcul est proportionnelle à M. De plus, s’il l’on choisit \beta>1, l’influence des points lointains est rapidement amortie lorsque leur distance au point de référence est supérieure à d_{r}

Exemple de champ projeté sur une grille régulière selon la méthode des plus proches voisins.

2.2 Les méthodes de pondération

Les méthodes de pondération sont parfois plus simples à mettre en œuvre et peuvent être efficaces lorsque le nombre de points connus est important et que le champ n’est pas particulièrement irrégulier.

Pondération par une fonction de la distance

Elle consiste à calculer un champ moyen pondéré par les valeurs des plus proches voisins. On calcule la distance euclidienne d_i entre le point k et le point i \in [1;n] et on pondère par w(d_i) la valeur du champ \varphi_i :

\psi_k = \frac{ \sum_{i=1}^{n} (w(d_i) \times \varphi_i)}{\sum_{i=1}^{n} w(d_i)}

Où la fonction w(d_i) est celle définie dans la section 2.1 qui précède.

Pondération inverse à la distance

Le principe est identique mais avec une fonction de pondération telle que :

w(d_i) = \frac{1}{d_i}

Méthode de Shepard

[En construction]

 

3. Résultats utiles

[En construction – À venir : meilleur algo de minimisation parmi ceux-ci et une exploration des paramètres optimaux]