v1.01.285 ZZZZ285 - Validation de PROJ_CHAMP / Collocation#
Résumé:
Ce test est un test informatique. Il valide la commande PROJ_CHAMP METHODE=”COLLOCATION” pour tous les types de mailles \(\mathrm{2D}\) et \(\mathrm{3D}\) , avec des bords droits ou courbes.
On illustre également la mise en œuvre d’une projection d’un champ aux nœuds par la méthode “COLLOCATION” dans le contexte du parallélisme distribué.
Il existe 7 modélisations (\(A\) , \(B\) , \(C\) , \(D\) , \(E\) , \(F\) , \(G\) , \(H\) ).
Principe du test#
Modélisations (\(A\) , \(B\) , \(C\) , \(D\) , \(E\) , \(F\) )#
On maille un carré (en \(\mathrm{2D}\) ) ou un cube (en \(\mathrm{3D}\) ) en utilisant des éléments linéaires à bords droits (TRIA3, QUAD4, HEXA8, PENTA6, TETRA4, PYRAM5). Le carré (ou le cube) est maillé 2 fois avec des discrétisations différentes. Appelons ces 2 maillages MA1 et MA2.
On utilise la commande CREA_MAILLAGE pour transformer ces maillages linéaires en maillages quadratiques (“LINE_QUAD”).
On utilise également la commande CREA_MAILLAGE pour créer des mailles «QUAD+» : QUAD9, HEXA27 et PENTA18.
On dispose alors pour tous les types de mailles : TRIA, QUAD, …, PYRAM de maillages linéaires(«LIN»), quadratiques («QUAD») ou «QUAD+»
Avec la commande MODI_MAILLAGE / DEFORME, on peut déformer les maillages MA1 et MA2 pour que les bords des éléments deviennent courbes.
On crée alors un champ aux nœuds (CH1) dont la forme est «analytique» (application d’une formule aux coordonnées des nœuds du maillage MA1). On peut utiliser 3 formules différentes :
une fonction affine des coordonnées (notée «degré 1»)
une fonction quadratique des coordonnées (notée «degré 2»)
une fonction quelconque des coordonnées (notée «degré 2+» bien que l’on utilise en réalité des puissances fractionnaires).
On réalise alors une projection de CH1 de MA1 vers MA2. On obtient CH2. Ce champ est à nouveau projeté de MA2 vers MA1. On obtient CH1B.
CH1 et CH1B ayant le même maillage support, on peut alors calculer l’erreur relative causée par la double projection.
On calcule alors (et on teste) le «maximum» de l’erreur relative sur le maillage.
Remarque :Comme la commande PROJ_CHAMP est parfois utilisée entre 2 maillages dont les nœuds sont géométriquement confondus (par exemple les études THM), on teste également cette configuration (MA2 = MA1) pour vérifier que dans ce cas, l’erreur de projection est nulle.
Modélisation (\(G\) )#
Le test illustre une première manière, sous-optimale, de réaliser une projection parallèle mais qui est très simple de mise en œuvre. Le test est lancé en parallèle sur 4 processus MPI. On construit un champ sur un objet Mesh classique et il est donc entièrement disponible sur chaque processus MPI (en d’autres termes, il est dupliqué sur chaque processus et on peut accéder à tous ses noeuds, mailles et groupes). On veut projeter ce champ sur un autre maillage, qui lui est un ParallelMesh qui est donc distribué entre les processus (chacun ne connait qu’une partie du ParallelMesh). En utilisant classiquement la commande PROJ_CHAMP, la projection est réalisée de manière parallèle pour chaque sous-domaine et un nouveau champ distribué est créé. Pour la vérification, on construit directement le champ cible sur le ParalleMesh et on vérifie qu’il est identique au champ issu de la projection.
Modélisation (\(H\) )#
Le test illustre une deuxième manière, également sous-optimale, de réaliser une projection parallèle et très simple de mise en œuvre. Le test est lancé en parallèle sur 4 processus MPI. On construit un champ sur un objet ParallelMesh. On veut projeter ce champ sur un autre maillage, qui est également un ParallelMesh. En utilisant le mot-clé DISTRIBUTION de PROJ_CHAMP, on construit un maillage auxiliaire, appelé ConnectionMesh, qui est dupliqué sur tous les processus. La projection est réalisée par chaque processus sur ce ConnectionMesh et un nouveau champ distribué est créé, cohérent avec la distribution du maillage cible. Pour la vérification, on construit directement le champ cible sur le ParalleMesh et on vérifie qu’il est identique au champ issu de la projection.
Solution de référence#
La solution de référence est 0. Idéalement, l’erreur de projection doit être nulle.
Résultats#
Modélisations (\(A\) , \(B\) , \(C\) , \(D\) , \(E\) , \(F\) )#
Dans les 2 tableaux ci-dessous, on a relevé l’erreur relative maximale liée à la double projection pour les différents cas de figures : bords droits ou courbes, types de mailles, champ linéaire, quadratique, …
Quand l’erreur de projection est inférieure à 1.e-9, on considère que la projection est «parfaite».
Remarques :
La combinaison «bords courbes + degré des mailles LIN» n’existe pas !
Le degré QUAD+n’existe pas pour les TETRA/ PYRAM
Projection d’un maillage sur un autre maillage (différent)#
bords |
degré des mailles |
degré du champ |
TRIA / QUAD |
HEXA / PENTA |
TETRA / PYRAM |
droits |
lin |
1 |
6.6E-12 |
4.9E-12 |
2.2E-16 |
2 |
6.3E-03 |
4.2E-03 |
0.046 |
||
2+ |
2.0E-03 |
1.3E-03 |
0.012 |
||
quad |
1 |
2.6E-11 |
2.0E-11 |
5.2E-16 |
|
2 |
4.3E-04 |
2.8E-04 |
5.5E-16 |
||
2+ |
1.1E-04 |
7.7E-05 |
1.5E-04 |
||
quad+ |
1 |
3.0E-11 |
2.2E-11 |
||
2 |
1.1E-10 |
6.5E-11 |
|||
2+ |
2.5E-06 |
4.9E-06 |
|||
courbes |
quad |
1 |
2.3E-03 |
1.7E-03 |
0.023 |
2 |
0.012 |
6.5E-03 |
0.048 |
||
2+ |
2.9E-03 |
1.9E-03 |
0.033 |
||
quad+ |
1 |
2.3E-03 |
1.7E-03 |
||
2 |
0.012 |
6.5E-03 |
|||
2+ |
2.9E-03 |
1.9E-03 |
Projection d’un maillage sur lui-même#
bords |
degré des mailles |
degré du champ |
TRIA / QUAD |
HEXA / PENTA |
TETRA / PYRAM |
droits |
lin |
1 |
0.0E+00 |
4.6E-16 |
0.0E+00 |
2 |
0.0E+00 |
3.3E-16 |
0.0E+00 |
||
2+ |
0.0E+00 |
3.9E-16 |
0.0E+00 |
||
quad |
1 |
3.4E-16 |
9.2E-16 |
7.8E-16 |
|
2 |
4.0E-16 |
1.0E-15 |
1.1E-15 |
||
2+ |
3.8E-16 |
8.0E-16 |
7.8E-16 |
||
quad+ |
1 |
8.1E-16 |
8.8E-16 |
||
2 |
8.8E-16 |
1.2E-15 |
|||
2+ |
8.4E-16 |
8.9E-16 |
|||
courbes |
quad |
1 |
1.2E-10 |
9.6E-11 |
1.1E-10 |
2 |
7.1E-10 |
3.0E-10 |
2.7E-10 |
||
2+ |
2.5E-10 |
1.8E-10 |
2.6E-10 |
||
quad+ |
1 |
1.3E-10 |
9.6E-11 |
||
2 |
5.2E-10 |
3.0E-10 |
|||
2+ |
2.5E-10 |
1.8E-10 |
Modélisation (\(G\) )#
L’erreur constatée est de l’ordre du zéro machine.
Modélisation (\(H\) )#
L’erreur constatée est de l’ordre du zéro machine.
Synthèse des résultats#
Lorsqu’on projette un maillage sur lui-même, il n’y a pas d’erreur de projection.
Lorsque les bords sont droits et que les champs sont du même degré que les éléments, il n’y a pas d’erreur de projection.
Dans le cas général (maillages différents et champ quelconque), l’erreur peut varier de 1.e-6 à 5.e-2 (\(\text{5%}\) ) si les bords sont droits. Lorsque les bords sont courbes l’erreur varie entre 2.e-3 et 5.e-2. On constate donc que pour les bords courbes, même s’ils perturbent l’algorithme d’appariement (en deux étapes dont la première linéarise les mailles), l’erreur maximale n’est pas plus importante que pour les bords droits (ici \(\text{5%}\) ).
Enfin, la vérification de la projection parallèle consistant à projeter un champ d’un maillage sur une version distribuée de lui-même, il n’y a pas d’erreur de projection.