{"id":1221,"date":"2026-08-21T14:28:42","date_gmt":"2026-08-21T14:28:42","guid":{"rendered":"https:\/\/matforge.org\/?p=1221","raw":"https:\/\/matforge.org\/?p=1221"},"modified":"2026-08-21T14:28:42","modified_gmt":"2026-08-21T14:28:42","slug":"anisotropic-mesh-adaptation-advection-dominated-flows","status":"publish","type":"post","link":"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/","title":{"rendered":"Adaptation du maillage anisotrope pour les flux domin\u00e9s par l&rsquo;advection","raw":"Adaptation du maillage anisotrope pour les flux domin\u00e9s par l'advection"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 16<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><blockquote>\n<p><strong>Cl\u00e9s \u00e0 emporter<\/strong><\/p>\n<ul>\n<li><strong>L&rsquo;adaptation au maillage anisotrope \u00e9tend les \u00e9l\u00e9ments le long de la direction du flux<\/strong>, r\u00e9duisant les degr\u00e9s de libert\u00e9 de 4&nbsp;\u00d7 (deal.ii) \u00e0 30&nbsp;\u00d7 (litt\u00e9rature) par rapport au raffinement isotrope tout en conservant la m\u00eame pr\u00e9cision.<\/li>\n<li><strong>Le tenseur m\u00e9trique<\/strong> &#8211; d\u00e9riv\u00e9 de la solution Hessian &#8211; d\u00e9finit comment chaque \u00e9l\u00e9ment doit s&rsquo;\u00e9tirer, transformant l&rsquo;adaptation du maillage en un probl\u00e8me d&rsquo;optimisation g\u00e9om\u00e9trique<\/li>\n<li><strong>Deux familles d&rsquo;estimateurs<\/strong>&nbsp;: bas\u00e9e sur la r\u00e9cup\u00e9ration (simple, rapide) ou orient\u00e9e vers un objectif (pr\u00e9cise pour votre quantit\u00e9 sp\u00e9cifique d&rsquo;int\u00e9r\u00eat mais n\u00e9cessite la r\u00e9solution d&rsquo;une \u00e9quation adjointe)<\/li>\n<li><strong>L&rsquo;\u00e9change de bords pr\u00e9serve la qualit\u00e9 du maillage<\/strong> lorsque l&rsquo;\u00e9tirement directionnel cr\u00e9erait autrement des \u00e9l\u00e9ments d\u00e9form\u00e9s &#8211; ignorez-le et que votre qualit\u00e9 de maillage se d\u00e9grade<\/li>\n<li><strong>Python-First Workflow<\/strong> avec Animate\/Firedrake rend l&rsquo;adaptation anisotrope accessible sans exp\u00e9rience approfondie du C++<\/li>\n<\/ul>\n<\/blockquote>\n<hr>\n<h2>Le probl\u00e8me que vous rencontrez<\/h2>\n<p>Vous avez construit une simulation pour un probl\u00e8me domin\u00e9 par l&rsquo;advection. Le flux transporte un scalaire &#8211; temp\u00e9rature, concentration, polluant &#8211; \u00e0 travers un domaine. Le nombre de peclets est \u00e9lev\u00e9. Et votre maillage ? C&rsquo;est uniforme. Chaque cellule a la m\u00eame taille, m\u00eame si la physique ne se soucie que de la r\u00e9solution le long de la direction du flux.<\/p>\n<p>Vous affinez tout de mani\u00e8re \u00e9gale. Le maillage devient plus dense. Votre simulation s&rsquo;ex\u00e9cute plus lentement. La solution s&rsquo;am\u00e9liore, \u00e0 peine. Et vous \u00eates coinc\u00e9 &#8211; la simulation prend des heures ou des jours, et vous ne savez pas si elle est converg\u00e9e.<\/p>\n<p><strong>C&rsquo;est l\u00e0 que l&rsquo;adaptation au maillage anisotrope cesse d&rsquo;\u00eatre facultative et devient essentielle.<\/strong><\/p>\n<p>Au lieu de rendre chaque cellule plus petite (raffinement isotrope), vous \u00e9tirez les cellules qui comptent dans la direction du flux et grossissent le reste. C&rsquo;est comme si vous zoomez sur une carte routi\u00e8re uniquement le long de l&rsquo;itin\u00e9raire que vous parcourez, pas sur tout le paysage. Vous obtenez la r\u00e9solution l\u00e0 o\u00f9 vous en avez besoin et sautez le reste.<\/p>\n<p>Ce guide vous montre exactement comment fonctionne l&rsquo;adaptation au maillage anisotrope, pourquoi elle r\u00e9duit de mani\u00e8re si spectaculaire les co\u00fbts de calcul et comment les mettre en \u0153uvre dans la pratique. Vous verrez des donn\u00e9es concr\u00e8tes de Deal.II (4 \u00d7 moins de degr\u00e9s de libert\u00e9), apprendrez la formulation du tenseur m\u00e9trique \u00e9tape par \u00e9tape et comprendre quand l&rsquo;utiliser par rapport aux strat\u00e9gies isotropes.<\/p>\n<hr>\n<h2>Pourquoi l&rsquo;adaptation au maillage anisotrope ?<\/h2>\n<h3>La nature directionnelle des couches d&rsquo;advection<\/h3>\n<p>Lorsque l&rsquo;advection domine la diffusion &#8211; un nombre \u00e9lev\u00e9 de peclet, g\u00e9n\u00e9ralement PE &gt;&gt; 2 \u2014 La solution d\u00e9veloppe des gradients nets align\u00e9s avec la direction du flux. Pensez \u00e0 un front de concentration qui est raide \u00e0 travers le ruisseau mais lisse le long de celui-ci. La physique est <strong>intrins\u00e8quement directionnelle<\/strong>.<\/p>\n<p>Le raffinement du maillage isotrope traite toutes les directions de la m\u00eame mani\u00e8re. Vous rendez les cellules plus petites dans toutes les directions, ce qui signifie que vous ajoutez une r\u00e9solution l\u00e0 o\u00f9 la solution est d\u00e9j\u00e0 lisse &#8211; un gaspillage de degr\u00e9s de libert\u00e9. Les calculs sont simples&nbsp;: raffinement isotrope en 2D co\u00fbte O (n\u00b2) et en co\u00fbts 3D O (n\u00b3) pour les couches domin\u00e9es par l&rsquo;advection. La surcharge cro\u00eet quadratiquement ou cubiquement.<\/p>\n<p>L&rsquo;adaptation anisotrope respecte la directionnalit\u00e9. Les \u00e9l\u00e9ments s&rsquo;\u00e9tirent le long du flux (rapport d&rsquo;aspect \u00e9lev\u00e9, align\u00e9s sur le d\u00e9bit) tout en restant grossiers. La m\u00eame pr\u00e9cision est obtenue avec <strong>d&rsquo;une \u00e0 deux ordres de moins de degr\u00e9s de libert\u00e9<\/strong> dans les applications publi\u00e9es.<\/p>\n<h3>Les chiffres concrets<\/h3>\n<p>Vous voulez des chiffres, pas seulement de la th\u00e9orie. Voici ce que le didacticiel Step-30 de Deal.II &#8211; un exemple de transport DG en cours d&rsquo;ex\u00e9cution &#8211; signale en fait :<\/p>\n<table>\n<thead>\n<tr>\n<th>Strat\u00e9gie<\/th>\n<th>Cycle 5 DOF<\/th>\n<th>Co\u00fbt relatif<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Raffinement isotrope<\/td>\n<td>16&nbsp;076<\/td>\n<td>ligne de base<\/td>\n<\/tr>\n<tr>\n<td>Raffinement anisotrope<\/td>\n<td>4&nbsp;120<\/td>\n<td><strong>4 \u00d7 moins<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>La strat\u00e9gie anisotrope atteint la m\u00eame pr\u00e9cision de la solution avec un facteur de <strong>4 degr\u00e9s de libert\u00e9 en moins de 4&nbsp;degr\u00e9s<\/strong> sur le m\u00eame probl\u00e8me. Ceci est directement v\u00e9rifiable \u00e0 partir de la sortie du didacticiel.<\/p>\n<p>La litt\u00e9rature pousse encore plus loin. Alauzet 2016 Decade Review, la synth\u00e8se la plus cit\u00e9e du domaine (285 citations), documente les r\u00e9ductions de DOF allant de <strong>15\u00d7 \u00e0 30\u00d7<\/strong> dans les applications CFD 3D utilisant des mailles anisotropes avec un aspect \u00e9lev\u00e9 ratios. Les chiffres d\u00e9pendent de la complexit\u00e9 du probl\u00e8me, mais la tendance est coh\u00e9rente&nbsp;: le raffinement sensible \u00e0 la direction surpasse syst\u00e9matiquement les strat\u00e9gies isotropes.<\/p>\n<blockquote>\n<p><strong>Related<\/strong>&nbsp;: si vous travaillez avec des probl\u00e8mes domin\u00e9s par l&rsquo;advection et que vous n&rsquo;avez pas encore couvert les techniques de stabilisation, notre [SUPG stabilization guide](https:\/\/matforge.org\/advection-dominated-problems-supg-stabilisation\/){rel=\u00a0\u00bbnofollow\u00a0\u00bb target=\u00a0\u00bb_blank\u00a0\u00bb} couvre le c\u00f4t\u00e9 discr\u00e9tisation du m\u00eame espace de probl\u00e8mes. Les mailles anisotropes et le SUPG sont souvent utilis\u00e9s ensemble.<\/p>\n<\/blockquote>\n<hr>\n<h2>Ce que la plupart des gens se trompent sur le raffinement du maillage<\/h2>\n<p>Avant de plonger dans la m\u00e9canique, abordons une id\u00e9e fausse courante.<\/p>\n<p><strong>La plupart des chercheurs pensent que \u00ab\u00a0plus de r\u00e9solution\u00a0\u00bb signifie \u00ab\u00a0les petites cellules du monde entier.\u00a0\u00bb<\/strong> C&rsquo;est l&rsquo;\u00e9tat d&rsquo;esprit isotrope &#8211; et c&rsquo;est cher. Lorsque le gradient de solution ne vit que dans une seule direction (le long du flux), le raffinage partout gaspille des ressources de calcul. Vous r\u00e9solvez un probl\u00e8me directionnel avec une strat\u00e9gie de solution isotrope.<\/p>\n<p><strong>La correction<\/strong>&nbsp;: l&rsquo;adaptation du maillage doit s&rsquo;aligner avec la physique, pas contre. Si le front de concentration est raide \u00e0 travers le ruisseau mais lisse le long de celui-ci, \u00e9tendez les \u00e9l\u00e9ments pour correspondre. C&rsquo;est la principale id\u00e9e derri\u00e8re le raffinement anisotrope, et c&rsquo;est la raison pour laquelle vous voyez ces r\u00e9ductions 4x \u00e0 30 \u00d7 DOF.<\/p>\n<p>Ce n&rsquo;est pas une id\u00e9e nouvelle &#8211; cela fait partie de la litt\u00e9rature sur l&rsquo;adaptation des mailles depuis les ann\u00e9es 1990. Ce qui a chang\u00e9, c&rsquo;est l&rsquo;accessibilit\u00e9. L&rsquo;outillage python-natif (anim\u00e9, pragmatique) rend d\u00e9sormais l&rsquo;adaptation anisotrope pratique pour les chercheurs qui \u00e9crivent Python, pas C++.<\/p>\n<hr>\n<h2>Comment fonctionne l&rsquo;adaptation au maillage anisotrope<\/h2>\n<p>Le pipeline comporte trois \u00e9tapes&nbsp;: calculer la Hesse de la solution, d\u00e9river le tenseur m\u00e9trique et Remesh. Passons \u00e0 chaque \u00e9tape.<\/p>\n<h3>\u00c9tape&nbsp;1&nbsp;: Calculer le Hesse<\/h3>\n<p>Commencez par la solution scalaire \u03c6 (temp\u00e9rature, concentration, quelle que soit votre variable). La Hesse de \u03c6 capture la courbure de la solution :<\/p>\n<pre><code>H(\u03c6) = [\u2202\u00b2\u03c6\/\u2202x\u00b2  \u2202\u00b2\u03c6\/\u2202x\u2202y]\n       [\u2202\u00b2\u03c6\/\u2202x\u2202y  \u2202\u00b2\u03c6\/\u2202y\u00b2]\n<\/code><\/pre>\n<p>En 2D, la Hesse est une matrice sym\u00e9trique 2\u00d72. En 3D, c&rsquo;est 3\u00d73. Le Hessian vous indique o\u00f9 la solution se courbe le plus, essentiellement, l\u00e0 o\u00f9 vous avez besoin de r\u00e9solution.<\/p>\n<blockquote>\n<p><strong>Note pratique<\/strong>&nbsp;: le Hessian absolu (la partie positive de H) est pr\u00e9f\u00e9r\u00e9 dans la pratique. Lorsque la solution a un front pointu, vous souhaitez r\u00e9soudre la courbure dans la direction <em>\u00e0 travers <\/em> le front, pas le long de celui-ci. L&rsquo;utilisation de la Hesse absolue \u00e9vite l&rsquo;ambigu\u00eft\u00e9 des signes de la Hesse brute.<\/p>\n<\/blockquote>\n<h3>\u00c9tape&nbsp;2&nbsp;: D\u00e9rivez le tenseur m\u00e9trique<\/h3>\n<p>Le tenseur m\u00e9trique M est d\u00e9riv\u00e9 des valeurs propres et des vecteurs propres absolus de Hessian. C&rsquo;est l&rsquo;\u00e9tape math\u00e9matique de base.<\/p>\n<ol>\n<li><strong>Eigen-D\u00e9composer<\/strong> Le Hessian absolu&nbsp;: H_abs = V \u00b7 \u03bb \u00b7 V\u1d40, o\u00f9 \u03bb d\u00e9tient des valeurs propres et V contient des vecteurs propres<\/li>\n<li><strong>construisez la m\u00e9trique<\/strong>&nbsp;: m = v \u00b7 |\u03bb| \u00b7 V\u1d40, o\u00f9 |\u03bb| est la matrice diagonale des magnitudes de valeurs propres<\/li>\n<\/ol>\n<p>Le tenseur m\u00e9trique encode les tailles et orientations d&rsquo;\u00e9l\u00e9ments souhait\u00e9es. Chaque entr\u00e9e diagonale dans |\u03bb| D\u00e9finit la r\u00e9solution souhait\u00e9e dans cette direction &#8211; des valeurs propres plus grandes signifient une r\u00e9solution plus fine. Les vecteurs propres (colonnes de V) d\u00e9finissent l&rsquo;orientation&nbsp;: les \u00e9l\u00e9ments doivent s&rsquo;\u00e9tirer le long du vecteur propre associ\u00e9 \u00e0 la plus grande valeur propre.<\/p>\n<p><strong>En pratique<\/strong>&nbsp;: le tenseur m\u00e9trique est une matrice sym\u00e9trique positive-d\u00e9finie. Ses valeurs propres d\u00e9finissent la taille des \u00e9l\u00e9ments (la racine carr\u00e9e inverse donne l&rsquo;espacement souhait\u00e9), et ses vecteurs propres d\u00e9finissent l&rsquo;orientation de l&rsquo;\u00e9l\u00e9ment. La m\u00e9trique est \u00e9valu\u00e9e \u00e0 chaque n\u0153ud de maillage et utilis\u00e9e lors du remaillage.<\/p>\n<blockquote>\n<p><strong>Source<\/strong>&nbsp;: le rapport technique Polimi fournit une d\u00e9rivation d\u00e9taill\u00e9e du tenseur m\u00e9trique \u00e0 partir des valeurs propres absolues\/vecteurs propres de Hessian, y compris les formules de dimensionnement d&rsquo;\u00e9l\u00e9ments bas\u00e9es sur l&rsquo;\u00e9quidistribution. Voir : <a href=\"https:\/\/www.mate.polimi.it\/biblioteca\/add\/qmox\/35-2025.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Polimi Report (35-2025)<\/a><\/p>\n<\/blockquote>\n<h3>\u00c9tape&nbsp;3&nbsp;: Remaillage<\/h3>\n<p>Avec le champ m\u00e9trique calcul\u00e9 sur le maillage, le remaillage suit. Le Remesher utilise le tenseur m\u00e9trique \u00e0 chaque n\u0153ud pour d\u00e9terminer la taille et l&rsquo;orientation de l&rsquo;\u00e9l\u00e9ment. Les forfaits standards sont :<\/p>\n<ul>\n<li><strong>BAMG<\/strong> (G\u00e9n\u00e9rateur de maillage adaptatif de limite) &#8211; la biblioth\u00e8que C++ classique<\/li>\n<li><strong>MmgTools<\/strong> \u2014 L&#8217;emballage moderne avec prise en charge de l&rsquo;API Python. Consultez la <a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">mmgtools Adaptation Tutoriel<\/a><\/li>\n<\/ul>\n<p>Lors du remaillage, le maillage respecte la m\u00e9trique&nbsp;: il \u00e9tend les \u00e9l\u00e9ments le long de la direction principale (la plus grande valeur propre, le vecteur), affine l\u00e0 o\u00f9 les valeurs propres sont grandes et grossi\u00e8res l\u00e0 o\u00f9 elles sont petites. Le r\u00e9sultat est un maillage align\u00e9 avec la structure de la solution.<\/p>\n<h3>Une note sur l&rsquo;\u00e9change de bords<\/h3>\n<p>Lorsque le tenseur m\u00e9trique dicte un fort \u00e9tirement directionnel, la connectivit\u00e9 du maillage local peut se d\u00e9grader. Les \u00e9l\u00e9ments deviennent tr\u00e8s asym\u00e9triques et les chutes de qualit\u00e9 maill\u00e9e. <strong>Echange de bords<\/strong> corrige ce probl\u00e8me.<\/p>\n<p>L&rsquo;\u00e9change de bords remplace un bord dans un \u00e9l\u00e9ment t\u00e9tra\u00e9drique (ou triangulaire) avec un bord diff\u00e9rent, maintenant une connectivit\u00e9 d&rsquo;\u00e9l\u00e9ment valide tout en r\u00e9duisant l&rsquo;asym\u00e9trie. MMGTools met en \u0153uvre cinq outils de minimisation locaux \u00e0 cette fin, notamment des \u00e9changes de bords, des ajouts\/suppressions de sommets et une relocalisation des sommets, sp\u00e9cifiquement pour pr\u00e9server la qualit\u00e9 du maillage lorsque le tenseur m\u00e9trique exige une anisotropie extr\u00eame.<\/p>\n<p><strong>Sautez les bords de l&rsquo;\u00e9change et la qualit\u00e9 de votre maillage se d\u00e9grade.<\/strong> La m\u00e9trique indiquera au maille d&rsquo;\u00e9tirer les \u00e9l\u00e9ments, mais sans les op\u00e9rateurs de connectivit\u00e9 locaux, ces \u00e9l\u00e9ments \u00e9tir\u00e9s deviennent inutilisables pour le solveur. L&rsquo;\u00e9change de bords n&rsquo;est pas facultatif lors de l&rsquo;utilisation d&rsquo;une forte adaptation bas\u00e9e sur la m\u00e9trique.<\/p>\n<hr>\n<h2>Estimateurs d&rsquo;erreurs&nbsp;: bas\u00e9 sur la r\u00e9cup\u00e9ration ou ax\u00e9 sur les objectifs<\/h2>\n<p>Avant toute adaptation, vous avez besoin d&rsquo;une estimation d&rsquo;erreur. O\u00f9 est la solution erron\u00e9e&nbsp;? Deux familles d&rsquo;estimateurs dominent la litt\u00e9rature.<\/p>\n<h3>Estimation bas\u00e9e sur la r\u00e9cup\u00e9ration<\/h3>\n<p>Les estimateurs bas\u00e9s sur la r\u00e9cup\u00e9ration (\u00e9galement appel\u00e9s r\u00e9siduels ou de type ZZ) calculent l&rsquo;erreur en comparant la solution num\u00e9rique \u00e0 une solution \u00ab\u00a0r\u00e9cup\u00e9r\u00e9e\u00a0\u00bb de meilleure qualit\u00e9.<\/p>\n<p><strong>Comment \u00e7a marche<\/strong>&nbsp;:<\/p>\n<ol>\n<li>Calculer la solution num\u00e9rique sur le maillage actuel<\/li>\n<li>Reconstruire une version plus lisse de la solution (r\u00e9cup\u00e9rer les gradients, reconstruire un champ d&rsquo;ordre sup\u00e9rieur)<\/li>\n<li>La diff\u00e9rence entre les deux est l&rsquo;indicateur d&rsquo;erreur<\/li>\n<\/ol>\n<p><strong>L&rsquo;estimateur Formaggia-Perotto<\/strong> en est l&rsquo;exemple canonique. Formaggia &amp; Micheletti (2004) a combin\u00e9 la r\u00e9cup\u00e9ration de Zienkiewicz-Zhu avec des estimations d&rsquo;interpolation anisotrope pour produire un estimateur d&rsquo;erreur robuste pour les probl\u00e8mes d&rsquo;advection-diffusion-r\u00e9action. Il est 151-cit\u00e9, largement utilis\u00e9 et simple \u00e0 mettre en \u0153uvre.<\/p>\n<p><strong>Pros<\/strong>&nbsp;: efficace en termes de calcul, bien \u00e9tabli, ne n\u00e9cessite pas de r\u00e9solution d&rsquo;\u00e9quations suppl\u00e9mentaires<br \/> <strong>Contre<\/strong>&nbsp;: l&rsquo;estimation des erreurs est ind\u00e9pendante de la solution &#8211; elle vous indique o\u00f9 la solution est incorrecte, mais pas comment cette erreur affecte Votre quantit\u00e9 sp\u00e9cifique d&rsquo;int\u00e9r\u00eat<\/p>\n<p><strong>Source<\/strong>&nbsp;: formaggia &amp; L&rsquo;article original de Micheletti &#8211; <a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/S0168927404000972\" target=\"_blank\" rel=\"nofollow noopener\">Analyse anisotrope d&rsquo;erreur a posteriori pour les probl\u00e8mes d&rsquo;advection-diffusion-r\u00e9action<\/a> &#8211; reste la principale r\u00e9f\u00e9rence pour le cadre Formaggia-Perotto.<\/p>\n<h3>Estimation ax\u00e9e sur les objectifs (bas\u00e9e adjointe)<\/h3>\n<p>L&rsquo;estimation ax\u00e9e sur les objectifs (\u00e9galement appel\u00e9e ADJOINT-Based ou \u00e0 double pond\u00e9ration r\u00e9siduelle\/DWR) va encore plus loin. Au lieu de mesurer l&rsquo;erreur g\u00e9n\u00e9rale, il mesure l&rsquo;erreur <strong>par rapport \u00e0 une quantit\u00e9 sp\u00e9cifique d&rsquo;int\u00e9r\u00eat<\/strong> &#8211; l&rsquo;int\u00e9grale qui vous int\u00e9resse r\u00e9ellement.<\/p>\n<p><strong>Comment \u00e7a marche<\/strong>&nbsp;:<\/p>\n<ol>\n<li>D\u00e9finissez votre \u00ab\u00a0quantit\u00e9 d&rsquo;int\u00e9r\u00eat\u00a0\u00bb (p. ex., flux total \u00e0 la sortie, contrainte maximale, temp\u00e9rature int\u00e9gr\u00e9e)<\/li>\n<li>R\u00e9soudre l&rsquo;\u00e9quation adjointe &#8211; une \u00e9quation de sensibilit\u00e9 qui vous indique comment l&rsquo;erreur de solution affecte votre quantit\u00e9 d&rsquo;int\u00e9r\u00eat<\/li>\n<li>Le produit de l&rsquo;erreur primale et de la sensibilit\u00e9 adjointe donne l&rsquo;estimation des erreurs orient\u00e9es vers un objectif<\/li>\n<\/ol>\n<p>L&rsquo;article de Wallwork 2019 le d\u00e9montre clairement dans l&rsquo;\u00e9cosyst\u00e8me FireDrake. La solution Adjoint fournit une <strong>carte de sensibilit\u00e9<\/strong> &#8211; les r\u00e9gions o\u00f9 les erreurs sont les plus importantes (valeurs adjacentes \u00e9lev\u00e9es) sont raffin\u00e9es, les r\u00e9gions o\u00f9 les erreurs n&rsquo;affectent pas votre quantit\u00e9 d&rsquo;int\u00e9r\u00eat sont corrompues.<\/p>\n<p><strong>Pros<\/strong>&nbsp;: pr\u00e9cision sp\u00e9cifique \u00e0 l&rsquo;optimisation&nbsp;: l&rsquo;adaptation concentre les ressources exactement l\u00e0 o\u00f9 elles ont un impact sur votre objectif<br \/> <strong>Cons<\/strong>&nbsp;: n\u00e9cessite de r\u00e9soudre une \u00e9quation adjointe suppl\u00e9mentaire&nbsp;; informatiquement plus cher; Plus complexe \u00e0 mettre en \u0153uvre<\/p>\n<p><strong>Source<\/strong>&nbsp;: Wallwork&nbsp;2019&nbsp;\u2013 <a\u00a00>Estimation des erreurs orient\u00e9es vers les objectifs et adaptation au maillage pour FireDrake fournit les d\u00e9tails de la mise en \u0153uvre de FireDrake et des conseils pratiques.<\/a\u00a00><\/p>\n<h3>Quand choisir lequel<\/h3>\n<table>\n<thead>\n<tr>\n<th>Situation<\/th>\n<th>Estimateur recommand\u00e9<\/th>\n<th>Pourquoi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Am\u00e9lioration g\u00e9n\u00e9rale de la pr\u00e9cision<\/td>\n<td>Bas\u00e9 sur la r\u00e9cup\u00e9ration (Formaggia-Perotto, ZZ)<\/td>\n<td>Simple, rapide, bien \u00e9tabli<\/td>\n<\/tr>\n<tr>\n<td>Votre objectif est une valeur int\u00e9grale ou un champ sp\u00e9cifique<\/td>\n<td>Orient\u00e9 vers les objectifs (Adjoint\/DWR)<\/td>\n<td>s&rsquo;adapte pr\u00e9cis\u00e9ment l\u00e0 o\u00f9 \u00e7a compte<\/td>\n<\/tr>\n<tr>\n<td>Budget de calcul limit\u00e9<\/td>\n<td>Bas\u00e9 sur la r\u00e9cup\u00e9ration<\/td>\n<td>Une solution, une adaptation<\/td>\n<\/tr>\n<tr>\n<td>Simulation \u00e0 enjeux \u00e9lev\u00e9s o\u00f9 chaque DOF compte<\/td>\n<td>ax\u00e9 sur les objectifs<\/td>\n<td>\u00c9vite de gaspiller la r\u00e9solution sur des r\u00e9gions non pertinentes<\/td>\n<\/tr>\n<tr>\n<td>Quantit\u00e9 inconnue d&rsquo;int\u00e9r\u00eat<\/td>\n<td>Bas\u00e9 sur la r\u00e9cup\u00e9ration<\/td>\n<td>Aucun annexe n\u00e9cessaire, couverture des erreurs large<\/td>\n<\/tr>\n<tr>\n<td>Probl\u00e8me d&rsquo;optimisation ou de conception<\/td>\n<td>ax\u00e9 sur les objectifs<\/td>\n<td>adapt\u00e9 \u00e0 votre fonction objectif<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote>\n<p><strong>Notre recommandation<\/strong>&nbsp;: commencez par une estimation bas\u00e9e sur la r\u00e9cup\u00e9ration. Il est plus simple, bien document\u00e9 et fonctionne bien dans la plupart des cas. Passez \u00e0 une adaptation ax\u00e9e sur les objectifs lorsque vous avez une quantit\u00e9 sp\u00e9cifique d&rsquo;int\u00e9r\u00eat et que vous pouvez justifier la r\u00e9solution des frais g\u00e9n\u00e9raux. L&rsquo;exemple Wallwork 2019 Firedrake est une excellente r\u00e9f\u00e9rence si vous choisissez le chemin ax\u00e9 sur les objectifs.<\/p>\n<\/blockquote>\n<hr>\n<h2>Mod\u00e8les de mise en \u0153uvre<\/h2>\n<p>La th\u00e9orie est claire. La mise en \u0153uvre est l&rsquo;endroit o\u00f9 le caoutchouc rencontre la route. Couvrir les principaux mod\u00e8les de diff\u00e9rents \u00e9cosyst\u00e8mes.<\/p>\n<h3>\u00c9change de bords et BAMG\/MMGTools<\/h3>\n<p>BAMG (Boundary Adaptive Mesh Generator) est la biblioth\u00e8que C++ originale pour l&rsquo;adaptation anisotrope bas\u00e9e sur la m\u00e9trique. MMGTools l&rsquo;a modernis\u00e9 avec une API Python et un outil de ligne de commande.<\/p>\n<p><strong>Le flux de travail MMGTools<\/strong>&nbsp;:<\/p>\n<ol>\n<li>Calculez le champ m\u00e9trique (Hessian \u2192 Tensor) sur votre maillage<\/li>\n<li>Exporter la m\u00e9trique sous la forme d&rsquo;un fichier lisible par MMG<\/li>\n<li>Ex\u00e9cutez <code>mmg2d -h1 mesh.in<\/code> (ou <code>mmg3d<\/code> pour la 3D) avec <code>-hs<\/code> des drapeaux pour le dimensionnement anisotrope<\/li>\n<li>L&rsquo;outil lit la m\u00e9trique, effectue un \u00e9change de bords et g\u00e9n\u00e8re un maillage adapt\u00e9<\/li>\n<\/ol>\n<p>Le didacticiel MMGTools \u00e0 <a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">mmgtools.org\/tutorials<\/a> couvre l&rsquo;utilisation de la ligne de commande et l&rsquo;API Python. C&rsquo;est le guide le plus pratique pour passer du tenseur m\u00e9trique au maillage adapt\u00e9.<\/p>\n<h3>Animer \/ Firedrake<\/h3>\n<p>Animate est un pipeline natif Python complet pour une adaptation anisotrope bas\u00e9e sur des m\u00e9triques. Il est construit sur FireDrake et s&rsquo;int\u00e8gre \u00e0 Pragmatic (le backend parall\u00e8le anisotrope de maillage de maillage).<\/p>\n<p><strong>Le flux de travail d&rsquo;animation<\/strong>&nbsp;:<\/p>\n<ol>\n<li>Cr\u00e9er un maillage FireDrake initial<\/li>\n<li>R\u00e9solvez votre PDE pour obtenir le champ scalaire<\/li>\n<li>Calculer le tenseur m\u00e9trique de la solution Hessian<\/li>\n<li>D\u00e9finir un champ m\u00e9trique sur le maillage<\/li>\n<li>Appelez la transformation de maillage d&rsquo;Animate&nbsp;: le maillage s&rsquo;adapte tout en pr\u00e9servant le champ<\/li>\n<\/ol>\n<p>Animate propose deux modules :<\/p>\n<ul>\n<li><strong>Mouvement<\/strong>&nbsp;: strat\u00e9gies de mouvement de maillage (remappage lisse des champs sur des maillages adapt\u00e9s)<\/li>\n<li><strong>Goalie<\/strong>&nbsp;: adaptation ax\u00e9e sur les objectifs avec des solveurs adjoints<\/li>\n<\/ul>\n<blockquote>\n<p><strong>Source<\/strong>&nbsp;: Animer les documents \u2014 <a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">mesh-adaptation.github.io<\/a> \u2014 et pragmatique \u2014 <a href=\"https:\/\/github.com\/meshadaptation\/pragmatic\" target=\"_blank\" rel=\"nofollow noopener\">MeshAdaptation\/Pragmatic sur GitHub<\/a> \u2014 Fournir le pipeline natif Python complet. Il s&rsquo;agit de la meilleure r\u00e9f\u00e9rence pour les chercheurs bas\u00e9s sur Python.<\/p>\n<\/blockquote>\n<h3>Deal.II Comparaison<\/h3>\n<p>Deal.II g\u00e8re le raffinement anisotrope en natif via ses drapeaux <code>RefinementCase::cut_x\/y\/z<\/code>. Le didacticiel STEP-30 est l&rsquo;exemple canonique :<\/p>\n<ul>\n<li>Le didacticiel r\u00e9sout l&rsquo;\u00e9quation de transport lin\u00e9aire \u00e0 l&rsquo;aide de DG<\/li>\n<li>Le raffinement anisotrope utilise <code>RefinementCase::cut_x<\/code> (et y\/z en 3D) pour affiner uniquement dans le sens du flux<\/li>\n<li>L&rsquo;algorithme d&rsquo;indicateur de saut identifie les gradients align\u00e9s sur les flux et divise les \u00e9l\u00e9ments en cons\u00e9quence<\/li>\n<li>Sortie : 4&nbsp;120 DOF (anisotrope) contre 16&nbsp;076 (isotrope) au cycle&nbsp;5<\/li>\n<\/ul>\n<p>L&rsquo;approche de Deal.II est <strong>plus grossi\u00e8re, pas plus fine<\/strong>&nbsp;: elle ne se r\u00e9sume pas, elle affine les \u00e9l\u00e9ments existants dans des directions sp\u00e9cifiques. Ceci est efficace pour les maillages structur\u00e9s ou semi-structur\u00e9s, mais moins flexibles que le remaillage bas\u00e9 sur des m\u00e9triques pour les cas non structur\u00e9s.<\/p>\n<blockquote>\n<p><strong>Related<\/strong>&nbsp;: notre [discontinuous Galerkin tutorial](https:\/\/matforge.org\/discontinus-galerkin-method-tutorial\/){rel=\u00a0\u00bbnofollow\u00a0\u00bb target=\u00a0\u00bb_blank\u00a0\u00bb} couvre la discr\u00e9tisation de la DG, qui est g\u00e9n\u00e9ralement coupl\u00e9e avec un raffinement anisotrope dans les probl\u00e8mes domin\u00e9s par l&rsquo;advection.<\/p>\n<\/blockquote>\n<hr>\n<h2>Quand utiliser Anisotrope vs isotrope<\/h2>\n<p>Tous les probl\u00e8mes ne b\u00e9n\u00e9ficient pas de l&rsquo;adaptation anisotrope. Voici le cadre de d\u00e9cision :<\/p>\n<table>\n<thead>\n<tr>\n<th>Situation<\/th>\n<th>strat\u00e9gie recommand\u00e9e<\/th>\n<th>Pourquoi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Direction de flux connue et coh\u00e9rente<\/td>\n<td><strong>Anisotrope<\/strong><\/td>\n<td>R\u00e9duction 4\u00d7-30\u00d7DoF, align\u00e9e sur la physique<\/td>\n<\/tr>\n<tr>\n<td>La direction d&rsquo;\u00e9coulement varie dans l&rsquo;espace<\/td>\n<td><strong>Mixte<\/strong> (anisotrope dans les r\u00e9gions de flux, isotrope ailleurs)<\/td>\n<td>Capture la directionnalit\u00e9 l\u00e0 o\u00f9 \u00e7a compte<\/td>\n<\/tr>\n<tr>\n<td>Direction du flux Inconnu<\/td>\n<td><strong>isotrope<\/strong><\/td>\n<td>Ne devinez pas&nbsp;; s&rsquo;adapter de mani\u00e8re conservatrice<\/td>\n<\/tr>\n<tr>\n<td>Solution lisse, pas de gradients nets<\/td>\n<td><strong>isotrope<\/strong><\/td>\n<td>Aucune structure directionnelle \u00e0 exploiter<\/td>\n<\/tr>\n<tr>\n<td>Simulation 3D, calculez bien le budget<\/td>\n<td><strong>Anisotrope<\/strong><\/td>\n<td>O(n\u00b3) isotrope est prohibitif ; \u00c9chelles anisotropes mieux<\/td>\n<\/tr>\n<tr>\n<td>Validation des recherches, comparaison de base<\/td>\n<td><strong>Ex\u00e9cutez les deux<\/strong><\/td>\n<td>documenter la diff\u00e9rence; Justifiez votre choix<\/td>\n<\/tr>\n<tr>\n<td>La qualit\u00e9 du maillage est d\u00e9j\u00e0 m\u00e9diocre<\/td>\n<td><strong>D&rsquo;abord isotrope<\/strong> (alors anisotrope)<\/td>\n<td>Fixer la qualit\u00e9 avant l&rsquo;adaptation<\/td>\n<\/tr>\n<tr>\n<td>Adaptation ax\u00e9e sur les objectifs disponible<\/td>\n<td><strong>Anisotrope ax\u00e9e sur les objectifs<\/strong><\/td>\n<td>adapt\u00e9 \u00e0 votre quantit\u00e9 d&rsquo;int\u00e9r\u00eat<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote>\n<p><strong>Notre recommandation<\/strong>&nbsp;: lorsque vous connaissez la direction du flux et que la solution a des gradients nets align\u00e9s, <strong>l&rsquo;adaptation anisotrope devrait \u00eatre votre strat\u00e9gie par d\u00e9faut<\/strong>. Le raffinement isotrope est le repli &#8211; utilisez-le lorsque le sens du flux varie, lorsque vous ne pouvez pas calculer la m\u00e9trique de mani\u00e8re fiable ou lors de la validation des r\u00e9sultats de base.<\/p>\n<\/blockquote>\n<hr>\n<h2>Flux de travail pratique : du z\u00e9ro au maillage adapt\u00e9<\/h2>\n<p>Voici un flux de travail concret que vous pouvez suivre. Nous utiliserons le pipeline Animate\/Firedrake comme exemple natif de Python, mais les \u00e9tapes s&rsquo;appliquent \u00e0 travers les \u00e9cosyst\u00e8mes.<\/p>\n<h3>\u00c9tape&nbsp;1&nbsp;: G\u00e9n\u00e9rer un maillage initial<\/h3>\n<p>Commencez par un maillage grossier et isotrope. Vous n&rsquo;avez pas besoin de raffinement \u00e0 ce stade, ce n&rsquo;est que votre point de d\u00e9part.<\/p>\n<pre><code class=\"language-python\">from firedrake import *\n\n# Simple 2D domain\nmesh = MeshRectangle(4.0, 2.0, 20, 10)  # 20\u00d710 initial cells\n<\/code><\/pre>\n<h3>\u00c9tape&nbsp;2&nbsp;: R\u00e9solvez la PDE<\/h3>\n<p>R\u00e9solvez votre probl\u00e8me domin\u00e9 par l&rsquo;advection sur le maillage initial.<\/p>\n<pre><code class=\"language-python\"># Define function space, trial\/test functions\nV = FunctionSpace(mesh, \"DG\", 1)\nu = Function(V, name=\"u\")\n\n# Solve your equation...\n# (example: advection-diffusion with DG)\n<\/code><\/pre>\n<h3>\u00c9tape&nbsp;3&nbsp;: Calculez le tenseur m\u00e9trique<\/h3>\n<p>Extrayez la Hesse de la solution et convertissez-la en champ m\u00e9trique.<\/p>\n<pre><code class=\"language-python\"># Compute the Hessian (numerical gradient of gradient)\nH = Function(V).project(grad(u))  # simplified\n\n# Construct metric tensor from absolute Hessian eigenvalues\/eigenvectors\n# (full derivation in Alauzet 2016, Eq. 3.2+)\n<\/code><\/pre>\n<h3>\u00c9tape&nbsp;4&nbsp;: D\u00e9finir le champ de mesure<\/h3>\n<p>Mappez le tenseur m\u00e9trique sur les n\u0153uds de maillage.<\/p>\n<pre><code class=\"language-python\">from animate import MetricField\n\nmetric_field = MetricField(mesh, metric_tensor)\n<\/code><\/pre>\n<h3>\u00c9tape&nbsp;5&nbsp;: Adaptez le maillage<\/h3>\n<p>Appelez la routine d&rsquo;adaptation. Animate g\u00e8re le remaillage, l&rsquo;\u00e9change de bord et l&rsquo;interpolation sur le terrain.<\/p>\n<pre><code class=\"language-python\">from animate import Movement\n\nmesh = Movement.apply(mesh, metric_field)\n<\/code><\/pre>\n<p>Le maillage est maintenant adapt\u00e9 : les \u00e9l\u00e9ments sont \u00e9tir\u00e9s le long de la direction d&rsquo;\u00e9coulement, raffin\u00e9s l\u00e0 o\u00f9 la solution a des gradients pointus et grossiers l\u00e0 o\u00f9 la solution est lisse. Le champ de solution est interpol\u00e9 sur le nouveau maillage.<\/p>\n<h3>\u00c9tape&nbsp;6&nbsp;: R\u00e9solution (facultatif)<\/h3>\n<p>Avec le maillage adapt\u00e9, relancez votre simulation. La solution doit converger plus rapidement (moins de DOF) et produire la m\u00eame pr\u00e9cision que la ligne de base isotrope.<\/p>\n<h3>\u00c9tape&nbsp;7&nbsp;: It\u00e9rer<\/h3>\n<p>L&rsquo;adaptation est g\u00e9n\u00e9ralement it\u00e9rative. Vous r\u00e9solvez, adaptez, r\u00e9solvez et r\u00e9p\u00e9tez jusqu&rsquo;\u00e0 ce que le maillage converge. Le pipeline Animate est con\u00e7u pour plusieurs cycles d&rsquo;adaptation.<\/p>\n<blockquote>\n<p><strong>Source<\/strong>&nbsp;: Animer les documents \u2014 <a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">mesh-adaptation.github.io<\/a> \u2014 Couvrez le pipeline complet du maillage initial au maillage adapt\u00e9. Le flux de travail ci-dessus suit leur s\u00e9quence recommand\u00e9e.<\/p>\n<\/blockquote>\n<hr>\n<h2>Qu&rsquo;en est-il de la qualit\u00e9 du maillage&nbsp;?<\/h2>\n<p>Voici un point \u00e0 souligner&nbsp;: <strong>La qualit\u00e9 du maillage d\u00e9termine si votre maillage adapt\u00e9 fonctionne m\u00eame<\/strong>.<\/p>\n<p>Si vous suivez le <a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\" target=\"_blank\" rel=\"nofollow noopener\">guide de la qualit\u00e9 du maillage<\/a>, vous saurez Les six mesures de qualit\u00e9 (qualit\u00e9 orthogonale, asym\u00e9trie, rapport d&rsquo;aspect, rapport jacobien, rapport volum\u00e9trique et limites d&rsquo;angle). Le raffinement anisotrope modifie consid\u00e9rablement les rapports d&rsquo;aspect &#8211; les \u00e9l\u00e9ments sont \u00e9tir\u00e9s. C&rsquo;est intentionnel. Mais les <strong>Autres<\/strong> doivent rester dans des limites de s\u00e9curit\u00e9.<\/p>\n<p><strong>La r\u00e8gle cl\u00e9<\/strong>&nbsp;: le raffinement anisotrope ne doit pas d\u00e9grader l&rsquo;asym\u00e9trie, le rapport jacobien ou les angles minimums au-del\u00e0 des seuils acceptables. L&rsquo;\u00e9change de bord existe pour cette raison.<\/p>\n<hr>\n<h2>erreurs courantes et comment les \u00e9viter<\/h2>\n<h3>Erreur n\u00b0&nbsp;1&nbsp;: sauter les bords<\/h3>\n<p><strong>Ce qui se passe<\/strong>&nbsp;: le tenseur m\u00e9trique \u00e9tend les \u00e9l\u00e9ments le long du flux. Sans \u00e9change de bords, ces \u00e9l\u00e9ments \u00e9tir\u00e9s deviennent tr\u00e8s biais\u00e9s. Votre rapport sur la qualit\u00e9 du maillage affiche des avertissements rouges et votre solveur se d\u00e9bat ou diverge.<\/p>\n<p><strong>Comment l&rsquo;\u00e9viter<\/strong>&nbsp;: Incluez toujours l&rsquo;\u00e9change de bords dans votre pipeline d&rsquo;adaptation. MMGTools met en \u0153uvre cinq outils de minimisation locaux pour cela. Dans Deal.II, l&rsquo;approche <code>RefinementCase::cut_x\/y\/z<\/code> \u00e9vite le probl\u00e8me en affinant les \u00e9l\u00e9ments existants plut\u00f4t qu&rsquo;en remassant.<\/p>\n<h3>Erreur #2 : Utilisation du raffinement isotrope pour les probl\u00e8mes directionnels<\/h3>\n<p><strong>Ce qui se passe<\/strong>&nbsp;: vous affinez partout de la m\u00eame mani\u00e8re. Vos DOF poussent comme O(N\u00b2) en 2D ou O(N\u00b3) en 3D. La simulation s&rsquo;ex\u00e9cute plus longtemps et l&rsquo;am\u00e9lioration de la pr\u00e9cision est marginale. Vous gaspillez des ressources de calcul sur des r\u00e9gions o\u00f9 la solution est d\u00e9j\u00e0 fluide.<\/p>\n<p><strong>Comment l&rsquo;\u00e9viter<\/strong>&nbsp;: ex\u00e9cutez d&rsquo;abord un cycle d&rsquo;adaptation anisotrope. Comparez le nombre de DOF. Si le maillage anisotrope atteint la m\u00eame pr\u00e9cision avec moins de DOF (et c&rsquo;est presque toujours le cas pour les probl\u00e8mes domin\u00e9s par l&rsquo;advection), utilisez-le.<\/p>\n<h3>Erreur n\u00b0&nbsp;3&nbsp;: confusion des estimateurs bas\u00e9s sur la r\u00e9cup\u00e9ration et ax\u00e9s sur les objectifs<\/h3>\n<p><strong>Ce qui se passe<\/strong>&nbsp;: vous utilisez un estimateur bas\u00e9 sur la r\u00e9cup\u00e9ration, mais attendez-vous \u00e0 une pr\u00e9cision ax\u00e9e sur les objectifs. L&rsquo;adaptation am\u00e9liore la pr\u00e9cision de la solution, mais votre quantit\u00e9 d&rsquo;int\u00e9r\u00eat sp\u00e9cifique ne s&rsquo;am\u00e9liore pas comme pr\u00e9vu. Vous \u00eates confus.<\/p>\n<p><strong>Comment l&rsquo;\u00e9viter<\/strong>&nbsp;: faites correspondre l&rsquo;estimateur \u00e0 votre objectif. Si vous voulez une am\u00e9lioration g\u00e9n\u00e9rale de la pr\u00e9cision, utilisez la r\u00e9cup\u00e9ration (formaggia-perotto, zz). Si vous souhaitez optimiser une int\u00e9grale ou une valeur de champ sp\u00e9cifique, utilisez un objectif orient\u00e9 (Adjoint\/DWR). Ils ont des objectifs diff\u00e9rents.<\/p>\n<h3>Erreur #4&nbsp;: supposer que l&rsquo;adaptation est une op\u00e9ration unique<\/h3>\n<p><strong>Ce qui se passe<\/strong>&nbsp;: vous vous adaptez une fois, r\u00e9solvez une fois et arr\u00eatez. Le maillage est \u00ab\u00a0assez bon\u00a0\u00bb, mais vous pourriez obtenir une meilleure pr\u00e9cision avec un autre cycle. La solution n&rsquo;a pas compl\u00e8tement converg\u00e9 vers le maillage adapt\u00e9.<\/p>\n<p><strong>Comment l&rsquo;\u00e9viter<\/strong>&nbsp;: ex\u00e9cutez plusieurs cycles d&rsquo;adaptation. Apr\u00e8s chaque cycle, r\u00e9solvez, calculez la nouvelle m\u00e9trique et r\u00e9adaptez-vous. Arr\u00eatez lorsque les changements de maillage sont n\u00e9gligeables entre les cycles (convergence de maillage).<\/p>\n<h3>Erreur #5 : Utilisation de l&rsquo;adaptation anisotrope sur des solutions fluides<\/h3>\n<p><strong>Ce qui se passe<\/strong>&nbsp;: la solution est fluide partout. Vous calculez le tenseur m\u00e9trique. Toutes les valeurs propres sont petites. L&rsquo;adaptation ne change rien de significatif. Vous avez perdu du temps.<\/p>\n<p><strong>Comment l&rsquo;\u00e9viter<\/strong>&nbsp;: v\u00e9rifiez d&rsquo;abord la structure de la solution. Si les gradients sont petits et lisses partout, le raffinement isotrope ou m\u00eame votre maillage initial est suffisant. L&rsquo;adaptation anisotrope ne porte ses fruits que lorsqu&rsquo;il y a une structure directionnelle \u00e0 exploiter.<\/p>\n<hr>\n<h2>Une comparaison rapide DOF<\/h2>\n<p>Revenons aux chiffres. Voici un r\u00e9sum\u00e9 visuel des donn\u00e9es de l&rsquo;accord.II STEP-30&nbsp;:<\/p>\n<div style=\"text-align: center; margin: 2rem 0;\">\n<!-- Isotropic bar --><\/p>\n<p>16&nbsp;076&nbsp;DOF<br \/>&nbsp;Isotrope&nbsp;:<br \/> <!-- Barre anisotrope --><\/p>\n<p>4&nbsp;120&nbsp;DOF<br \/> Anisotrope&nbsp;:<br \/> <!-- Annotation --><br \/> 4&nbsp;\u00d7 moins de degr\u00e9s de libert\u00e9 pour la m\u00eame pr\u00e9cision<br \/> (Deal.ii step-30, \u00e9quation de transport lin\u00e9aire)<\/p>\n<\/div>\n<p>L&rsquo;approche isotrope utilise pr\u00e8s de <strong>quatre fois plus de degr\u00e9s de libert\u00e9<\/strong>. En 3D, ces chiffres s&rsquo;aggravent de fa\u00e7on spectaculaire &#8211; la litt\u00e9rature rapporte des diff\u00e9rences de 15 \u00e0 30 \u00d7 pour les couches domin\u00e9es par l&rsquo;advection. Le co\u00fbt du raffinement isotrope est prohibitif pour les simulations \u00e0 grande \u00e9chelle.<\/p>\n<hr>\n<h2>Adaptation ax\u00e9e sur les objectifs : la fronti\u00e8re avanc\u00e9e<\/h2>\n<p>Si l&rsquo;estimation bas\u00e9e sur la r\u00e9cup\u00e9ration est la norme, l&rsquo;adaptation ax\u00e9e sur les objectifs est la fronti\u00e8re. Il pose une question plus sp\u00e9cifique&nbsp;: \u00ab\u00a0o\u00f9 l&rsquo;erreur de solution affecte-t-elle la quantit\u00e9 qui me tient \u00e0 c\u0153ur&nbsp;?\u00a0\u00bb<\/p>\n<p>Le papier Firedrake 2019 de Wallwork montre le flux de travail :<\/p>\n<ol>\n<li><strong>D\u00e9finir votre quantit\u00e9 d&rsquo;int\u00e9r\u00eat<\/strong> \u2014 par exemple, flux total \u00e0 travers une limite de sortie, concentration maximale en un point<\/li>\n<li><strong>R\u00e9soudre l&rsquo;\u00e9quation adjointe<\/strong> &#8211; l&rsquo;\u00e9quation de sensibilit\u00e9 qui vous indique comment les erreurs se propagent \u00e0 votre quantit\u00e9 d&rsquo;int\u00e9r\u00eat<\/li>\n<li><strong>Calculez le r\u00e9siduel pond\u00e9r\u00e9<\/strong> &#8211; le produit de l&rsquo;erreur primitive et de la sensibilit\u00e9 adjointe donne l&rsquo;estimation des erreurs orient\u00e9es vers un objectif<\/li>\n<li><strong>Adapter<\/strong> \u2014 Affiner l\u00e0 o\u00f9 la sensibilit\u00e9 adjointe et l&rsquo;erreur primaire sont toutes deux importantes<\/li>\n<\/ol>\n<p>Le r\u00e9sultat est <strong>adaptation sp\u00e9cifique \u00e0 l&rsquo;optimisation<\/strong>. Les r\u00e9gions qui n&rsquo;affectent pas votre quantit\u00e9 d&rsquo;int\u00e9r\u00eat deviennent grossi\u00e8res. Les r\u00e9gions qui s&rsquo;affinent de mani\u00e8re agressive. Le compromis&nbsp;: vous devez r\u00e9soudre l&rsquo;\u00e9quation adjointe (une solution suppl\u00e9mentaire) et la mise en \u0153uvre est plus complexe.<\/p>\n<blockquote>\n<p><strong>Quand l&rsquo;utiliser<\/strong>&nbsp;: lorsque votre simulation a une m\u00e9trique cible claire&nbsp;: flux total, production int\u00e9gr\u00e9e, pression maximale. Lorsque chaque degr\u00e9 de libert\u00e9 compte, l&rsquo;adaptation ax\u00e9e sur les objectifs vaut la peine.<\/p>\n<\/blockquote>\n<hr>\n<h2>Avant de commencer&nbsp;: une liste de contr\u00f4le<\/h2>\n<blockquote>\n<p><strong>Notre recommandation<\/strong>&nbsp;: lors de la r\u00e9solution de probl\u00e8mes domin\u00e9s par l&rsquo;advection, l&rsquo;adaptation anisotrope doit \u00eatre votre strat\u00e9gie par d\u00e9faut lorsque la direction du flux est connue. Le raffinement isotrope doit \u00eatre le repli lorsque la direction du flux varie dans l&rsquo;espace ou est inconnue.<\/p>\n<\/blockquote>\n<p>Avant de lancer une adaptation anisotrope, v\u00e9rifiez :<\/p>\n<ul>\n<li>[ ] <strong>La direction d&rsquo;\u00e9coulement est connue ou dominante<\/strong> \u2014 le tenseur m\u00e9trique sera directionnel&nbsp;; Le flux isotrope n\u00e9cessite des maillages isotropes<\/li>\n<li>[ ] <strong>Num\u00e9ro de peclet \u00e9lev\u00e9 confirm\u00e9<\/strong> (PE &gt;&gt; 2) \u2014 Si la diffusion domine, le raffinement isotrope est suffisant<\/li>\n<li>[ ] <strong>La qualit\u00e9 du maillage est acceptable<\/strong>&nbsp;: fixer l&rsquo;asym\u00e9trie, le rapport jacobien et les limites d&rsquo;angle avant l&rsquo;adaptation<\/li>\n<li>[ ] <strong>L&rsquo;\u00e9change de bords est inclus<\/strong> &#8211; l&rsquo;\u00e9tirement directionnel d\u00e9grade la connectivit\u00e9 sans<\/li>\n<li>[ ] <strong>Estimateur choisi<\/strong> \u2014 R\u00e9cup\u00e9ration pour une pr\u00e9cision g\u00e9n\u00e9rale, ax\u00e9e sur les objectifs pour des quantit\u00e9s sp\u00e9cifiques d&rsquo;int\u00e9r\u00eat<\/li>\n<li>[ ] <strong>Cycles d&rsquo;adaptation pr\u00e9vus<\/strong> \u2014 Un cycle suffit rarement ; It\u00e9rer jusqu&rsquo;\u00e0 la convergence du maillage<\/li>\n<\/ul>\n<hr>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>L&rsquo;adaptation au maillage anisotrope est l&rsquo;une des techniques les plus efficaces pour les probl\u00e8mes domin\u00e9s par l&rsquo;advection. Au lieu de raffiner partout de la m\u00eame mani\u00e8re (isotrope), vous \u00e9tirez les \u00e9l\u00e9ments le long de la direction d&rsquo;\u00e9coulement et grossiers l\u00e0 o\u00f9 la solution est lisse. Les calculs sont simples&nbsp;: calculez le Hesse de la solution, d\u00e9river le tenseur m\u00e9trique de ses valeurs propres et de ses vecteurs propres, et remesh en respectant la m\u00e9trique.<\/p>\n<p>Les chiffres parlent d&rsquo;eux-m\u00eames. Le didacticiel STEP-30 de Deal.II montre <strong>4&nbsp;120&nbsp;DOF (anisotrope) contre 16&nbsp;076&nbsp;DOF (isotrope)<\/strong> pour la m\u00eame pr\u00e9cision&nbsp;: une r\u00e9duction de 4&nbsp;\u00d7. Les rapports de litt\u00e9rature poussent encore plus : 15 \u00d7 \u00e0 30 \u00d7 moins de degr\u00e9s de libert\u00e9 dans les applications CFD 3D.<\/p>\n<p>Deux familles d&rsquo;estimateurs ont des objectifs diff\u00e9rents. Les estimateurs bas\u00e9s sur la r\u00e9cup\u00e9ration (formaggia-perotto, zienkiewicz-zhu) sont rapides et bien \u00e9tablis. Les estimateurs ax\u00e9s sur les objectifs (Adjoint\/DWR) sont pr\u00e9cis pour votre quantit\u00e9 d&rsquo;int\u00e9r\u00eats sp\u00e9cifiques, mais n\u00e9cessitent la r\u00e9solution d&rsquo;une \u00e9quation suppl\u00e9mentaire. <strong>Echange de bords<\/strong> pr\u00e9serve la qualit\u00e9 du maillage lorsque l&rsquo;\u00e9tirement directionnel d\u00e9graderait autrement la connectivit\u00e9.<\/p>\n<p>L&rsquo;\u00e9cosyst\u00e8me Python (anim\u00e9\/drake, pragmatique) rend l&rsquo;adaptation anisotrope accessible aux chercheurs qui \u00e9crivent Python. Vous n&rsquo;avez plus besoin d&rsquo;une exp\u00e9rience approfondie en C++ pour utiliser une adaptation bas\u00e9e sur la m\u00e9trique.<\/p>\n<hr>\n<h2>Prochaines \u00e9tapes<\/h2>\n<ol>\n<li><strong>V\u00e9rifiez le num\u00e9ro de peclet de votre probl\u00e8me<\/strong> \u2014 si PE &gt;&gt; 2, l&rsquo;adaptation anisotrope est probablement b\u00e9n\u00e9fique<\/li>\n<li><strong>Ex\u00e9cutez deal.ii step-30<\/strong> &#8211; suivez le didacticiel et v\u00e9rifiez vous-m\u00eame la r\u00e9duction DOF (4\u00d7 sur l&rsquo;\u00e9quation de transport lin\u00e9aire)<\/li>\n<li><strong>Essayer Animate\/FireDrake<\/strong> \u2014 Commencez par le pipeline de base&nbsp;: maillage initial \u2192 champ m\u00e9trique \u2192 adaptation<\/li>\n<li><strong>Comparer isotrope vs anisotrope<\/strong> \u2014 Documenter la diff\u00e9rence DOF et l&rsquo;am\u00e9lioration de la pr\u00e9cision<\/li>\n<li><strong>Consid\u00e9rez une adaptation orient\u00e9e vers un objectif<\/strong> \u2014 Si vous avez une quantit\u00e9 sp\u00e9cifique d&rsquo;int\u00e9r\u00eat, r\u00e9solvez l&rsquo;adjoint et adaptez-vous en fonction de sa carte de sensibilit\u00e9<\/li>\n<\/ol>\n<hr>\n<h2>Guides connexes<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/advection-dominated-problems-supg-stabilization\/\" target=\"_blank\" rel=\"nofollow noopener\">probl\u00e8mes domin\u00e9s par advection&nbsp;: sch\u00e9mas au vent et Stabilisation SUPG<\/a> \u2014 Techniques de discr\u00e9tisation pour la m\u00eame classe de probl\u00e8mes<\/li>\n<li><a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\" target=\"_blank\" rel=\"nofollow noopener\">\u00c9tude sur la qualit\u00e9 et la convergence des maillages&nbsp;: une pratique pratique Guide<\/a> \u2014 Mesures de qualit\u00e9 du maillage et v\u00e9rification du raffinement<\/li>\n<li><a href=\"https:\/\/matforge.org\/discontinuous-galerkin-method-tutorial\/\" target=\"_blank\" rel=\"nofollow noopener\">Didacticiel sur la m\u00e9thode Galerkin discontinu<\/a> \u2014 DG est g\u00e9n\u00e9ralement associ\u00e9 \u00e0 un raffinement anisotrope pour les flux domin\u00e9s par l&rsquo;advection<\/li>\n<\/ul>\n<hr>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/S0168927404000972\" target=\"_blank\" rel=\"nofollow noopener\">Formaggia, L., &amp; Micheletti, M. (2004). Analyse d&rsquo;erreur a posteriori anisotrope pour les probl\u00e8mes d&rsquo;advection-diffusion-r\u00e9action. ordinateurs &amp; structures.<\/a><\/li>\n<li><a href=\"https:\/\/inria.hal.science\/hal-01426159\/file\/PrePrint_Alauzet_A%20decade%20of%20progress%20on%20anisotropic%20mesh%20adaptation%20for%20computational%20fluid%20dynamics.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Alauzet, L. (2016). Une d\u00e9cennie de progr\u00e8s sur l&rsquo;adaptation du maillage anisotrope pour la dynamique des fluides informatiques. ordinateurs &amp; structures.<\/a><\/li>\n<li><a href=\"https:\/\/eartharxiv.org\/repository\/object\/504\/download\/1091\/\" target=\"_blank\" rel=\"nofollow noopener\">Wallwork, A. (2019). Estimation d&rsquo;erreurs orient\u00e9e objectif et adaptation de maillage pour Firedrake. EarthArxiv.<\/a><\/li>\n<li><a href=\"https:\/\/www.dealii.org\/current\/doxygen\/deal.II\/step_30.html\" target=\"_blank\" rel=\"nofollow noopener\">Deal.II Didacticiel sur l&rsquo;\u00e9tape 30.<\/a><\/li>\n<li><a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">Documentation Animer\/Firedrake.<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/meshadaptation\/pragmatic\" target=\"_blank\" rel=\"nofollow noopener\">Pragmatique (backend d&rsquo;adaptation de maillage).<\/a><\/li>\n<li><a href=\"https:\/\/www.mate.polimi.it\/biblioteca\/add\/qmox\/35-2025.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Rapport technique Polimi (35-2025). Estimateurs d&rsquo;erreurs bas\u00e9s sur la r\u00e9cup\u00e9ration anisotrope et adaptation au maillage.<\/a><\/li>\n<li><a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">Tutoriel d&rsquo;adaptation de MMGTools.<\/a><\/li>\n<\/ul>\n","protected":false,"raw":"<blockquote><p><strong>Cl\u00e9s \u00e0 emporter<\/strong><\/p>\n<ul>\n<li><strong>L'adaptation au maillage anisotrope \u00e9tend les \u00e9l\u00e9ments le long de la direction du flux<\/strong>, r\u00e9duisant les degr\u00e9s de libert\u00e9 de 4&nbsp;\u00d7 (deal.ii) \u00e0 30&nbsp;\u00d7 (litt\u00e9rature) par rapport au raffinement isotrope tout en conservant la m\u00eame pr\u00e9cision.<\/li>\n<li><strong>Le tenseur m\u00e9trique<\/strong> - d\u00e9riv\u00e9 de la solution Hessian - d\u00e9finit comment chaque \u00e9l\u00e9ment doit s'\u00e9tirer, transformant l'adaptation du maillage en un probl\u00e8me d'optimisation g\u00e9om\u00e9trique<\/li>\n<li><strong>Deux familles d'estimateurs<\/strong>&nbsp;: bas\u00e9e sur la r\u00e9cup\u00e9ration (simple, rapide) ou orient\u00e9e vers un objectif (pr\u00e9cise pour votre quantit\u00e9 sp\u00e9cifique d'int\u00e9r\u00eat mais n\u00e9cessite la r\u00e9solution d'une \u00e9quation adjointe)<\/li>\n<li><strong>L'\u00e9change de bords pr\u00e9serve la qualit\u00e9 du maillage<\/strong> lorsque l'\u00e9tirement directionnel cr\u00e9erait autrement des \u00e9l\u00e9ments d\u00e9form\u00e9s - ignorez-le et que votre qualit\u00e9 de maillage se d\u00e9grade<\/li>\n<li><strong>Python-First Workflow<\/strong> avec Animate\/Firedrake rend l'adaptation anisotrope accessible sans exp\u00e9rience approfondie du C++<\/li>\n<\/ul>\n<\/blockquote>\n<hr>\n<h2>Le probl\u00e8me que vous rencontrez<\/h2>\n<p>Vous avez construit une simulation pour un probl\u00e8me domin\u00e9 par l'advection. Le flux transporte un scalaire - temp\u00e9rature, concentration, polluant - \u00e0 travers un domaine. Le nombre de peclets est \u00e9lev\u00e9. Et votre maillage ? C'est uniforme. Chaque cellule a la m\u00eame taille, m\u00eame si la physique ne se soucie que de la r\u00e9solution le long de la direction du flux.<\/p>\n<p>Vous affinez tout de mani\u00e8re \u00e9gale. Le maillage devient plus dense. Votre simulation s'ex\u00e9cute plus lentement. La solution s'am\u00e9liore, \u00e0 peine. Et vous \u00eates coinc\u00e9 - la simulation prend des heures ou des jours, et vous ne savez pas si elle est converg\u00e9e.<\/p>\n<p><strong>C'est l\u00e0 que l'adaptation au maillage anisotrope cesse d'\u00eatre facultative et devient essentielle.<\/strong><\/p>\n<p>Au lieu de rendre chaque cellule plus petite (raffinement isotrope), vous \u00e9tirez les cellules qui comptent dans la direction du flux et grossissent le reste. C'est comme si vous zoomez sur une carte routi\u00e8re uniquement le long de l'itin\u00e9raire que vous parcourez, pas sur tout le paysage. Vous obtenez la r\u00e9solution l\u00e0 o\u00f9 vous en avez besoin et sautez le reste.<\/p>\n<p>Ce guide vous montre exactement comment fonctionne l'adaptation au maillage anisotrope, pourquoi elle r\u00e9duit de mani\u00e8re si spectaculaire les co\u00fbts de calcul et comment les mettre en \u0153uvre dans la pratique. Vous verrez des donn\u00e9es concr\u00e8tes de Deal.II (4 \u00d7 moins de degr\u00e9s de libert\u00e9), apprendrez la formulation du tenseur m\u00e9trique \u00e9tape par \u00e9tape et comprendre quand l'utiliser par rapport aux strat\u00e9gies isotropes.<\/p>\n<hr>\n<h2>Pourquoi l'adaptation au maillage anisotrope ?<\/h2>\n<h3>La nature directionnelle des couches d'advection<\/h3>\n<p>Lorsque l'advection domine la diffusion - un nombre \u00e9lev\u00e9 de peclet, g\u00e9n\u00e9ralement PE &gt;&gt; 2 \u2014 La solution d\u00e9veloppe des gradients nets align\u00e9s avec la direction du flux. Pensez \u00e0 un front de concentration qui est raide \u00e0 travers le ruisseau mais lisse le long de celui-ci. La physique est <strong>intrins\u00e8quement directionnelle<\/strong>.<\/p>\n<p>Le raffinement du maillage isotrope traite toutes les directions de la m\u00eame mani\u00e8re. Vous rendez les cellules plus petites dans toutes les directions, ce qui signifie que vous ajoutez une r\u00e9solution l\u00e0 o\u00f9 la solution est d\u00e9j\u00e0 lisse - un gaspillage de degr\u00e9s de libert\u00e9. Les calculs sont simples&nbsp;: raffinement isotrope en 2D co\u00fbte O (n\u00b2) et en co\u00fbts 3D O (n\u00b3) pour les couches domin\u00e9es par l'advection. La surcharge cro\u00eet quadratiquement ou cubiquement.<\/p>\n<p>L'adaptation anisotrope respecte la directionnalit\u00e9. Les \u00e9l\u00e9ments s'\u00e9tirent le long du flux (rapport d'aspect \u00e9lev\u00e9, align\u00e9s sur le d\u00e9bit) tout en restant grossiers. La m\u00eame pr\u00e9cision est obtenue avec <strong>d'une \u00e0 deux ordres de moins de degr\u00e9s de libert\u00e9<\/strong> dans les applications publi\u00e9es.<\/p>\n<h3>Les chiffres concrets<\/h3>\n<p>Vous voulez des chiffres, pas seulement de la th\u00e9orie. Voici ce que le didacticiel Step-30 de Deal.II - un exemple de transport DG en cours d'ex\u00e9cution - signale en fait :<\/p>\n<table>\n<thead>\n<tr>\n<th>Strat\u00e9gie<\/th>\n<th>Cycle 5 DOF<\/th>\n<th>Co\u00fbt relatif<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Raffinement isotrope<\/td>\n<td>16&nbsp;076<\/td>\n<td>ligne de base<\/td>\n<\/tr>\n<tr>\n<td>Raffinement anisotrope<\/td>\n<td>4&nbsp;120<\/td>\n<td><strong>4 \u00d7 moins<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>La strat\u00e9gie anisotrope atteint la m\u00eame pr\u00e9cision de la solution avec un facteur de <strong>4 degr\u00e9s de libert\u00e9 en moins de 4&nbsp;degr\u00e9s<\/strong> sur le m\u00eame probl\u00e8me. Ceci est directement v\u00e9rifiable \u00e0 partir de la sortie du didacticiel.<\/p>\n<p>La litt\u00e9rature pousse encore plus loin. Alauzet 2016 Decade Review, la synth\u00e8se la plus cit\u00e9e du domaine (285 citations), documente les r\u00e9ductions de DOF allant de <strong>15\u00d7 \u00e0 30\u00d7<\/strong> dans les applications CFD 3D utilisant des mailles anisotropes avec un aspect \u00e9lev\u00e9 ratios. Les chiffres d\u00e9pendent de la complexit\u00e9 du probl\u00e8me, mais la tendance est coh\u00e9rente&nbsp;: le raffinement sensible \u00e0 la direction surpasse syst\u00e9matiquement les strat\u00e9gies isotropes.<\/p>\n<blockquote><p><strong>Related<\/strong>&nbsp;: si vous travaillez avec des probl\u00e8mes domin\u00e9s par l'advection et que vous n'avez pas encore couvert les techniques de stabilisation, notre [SUPG stabilization guide](https:\/\/matforge.org\/advection-dominated-problems-supg-stabilisation\/){rel=\"nofollow\" target=\"_blank\"} couvre le c\u00f4t\u00e9 discr\u00e9tisation du m\u00eame espace de probl\u00e8mes. Les mailles anisotropes et le SUPG sont souvent utilis\u00e9s ensemble.<\/p><\/blockquote>\n<hr>\n<h2>Ce que la plupart des gens se trompent sur le raffinement du maillage<\/h2>\n<p>Avant de plonger dans la m\u00e9canique, abordons une id\u00e9e fausse courante.<\/p>\n<p><strong>La plupart des chercheurs pensent que \"plus de r\u00e9solution\" signifie \"les petites cellules du monde entier.\"<\/strong> C'est l'\u00e9tat d'esprit isotrope - et c'est cher. Lorsque le gradient de solution ne vit que dans une seule direction (le long du flux), le raffinage partout gaspille des ressources de calcul. Vous r\u00e9solvez un probl\u00e8me directionnel avec une strat\u00e9gie de solution isotrope.<\/p>\n<p><strong>La correction<\/strong>&nbsp;: l'adaptation du maillage doit s'aligner avec la physique, pas contre. Si le front de concentration est raide \u00e0 travers le ruisseau mais lisse le long de celui-ci, \u00e9tendez les \u00e9l\u00e9ments pour correspondre. C'est la principale id\u00e9e derri\u00e8re le raffinement anisotrope, et c'est la raison pour laquelle vous voyez ces r\u00e9ductions 4x \u00e0 30 \u00d7 DOF.<\/p>\n<p>Ce n'est pas une id\u00e9e nouvelle - cela fait partie de la litt\u00e9rature sur l'adaptation des mailles depuis les ann\u00e9es 1990. Ce qui a chang\u00e9, c'est l'accessibilit\u00e9. L'outillage python-natif (anim\u00e9, pragmatique) rend d\u00e9sormais l'adaptation anisotrope pratique pour les chercheurs qui \u00e9crivent Python, pas C++.<\/p>\n<hr>\n<h2>Comment fonctionne l'adaptation au maillage anisotrope<\/h2>\n<p>Le pipeline comporte trois \u00e9tapes&nbsp;: calculer la Hesse de la solution, d\u00e9river le tenseur m\u00e9trique et Remesh. Passons \u00e0 chaque \u00e9tape.<\/p>\n<h3>\u00c9tape&nbsp;1&nbsp;: Calculer le Hesse<\/h3>\n<p>Commencez par la solution scalaire \u03c6 (temp\u00e9rature, concentration, quelle que soit votre variable). La Hesse de \u03c6 capture la courbure de la solution :<\/p>\n<pre><code>H(\u03c6) = [\u2202\u00b2\u03c6\/\u2202x\u00b2  \u2202\u00b2\u03c6\/\u2202x\u2202y]\n       [\u2202\u00b2\u03c6\/\u2202x\u2202y  \u2202\u00b2\u03c6\/\u2202y\u00b2]\n<\/code><\/pre>\n<p>En 2D, la Hesse est une matrice sym\u00e9trique 2\u00d72. En 3D, c'est 3\u00d73. Le Hessian vous indique o\u00f9 la solution se courbe le plus, essentiellement, l\u00e0 o\u00f9 vous avez besoin de r\u00e9solution.<\/p>\n<blockquote><p><strong>Note pratique<\/strong>&nbsp;: le Hessian absolu (la partie positive de H) est pr\u00e9f\u00e9r\u00e9 dans la pratique. Lorsque la solution a un front pointu, vous souhaitez r\u00e9soudre la courbure dans la direction <em>\u00e0 travers <\/em> le front, pas le long de celui-ci. L'utilisation de la Hesse absolue \u00e9vite l'ambigu\u00eft\u00e9 des signes de la Hesse brute.<\/p><\/blockquote>\n<h3>\u00c9tape&nbsp;2&nbsp;: D\u00e9rivez le tenseur m\u00e9trique<\/h3>\n<p>Le tenseur m\u00e9trique M est d\u00e9riv\u00e9 des valeurs propres et des vecteurs propres absolus de Hessian. C'est l'\u00e9tape math\u00e9matique de base.<\/p>\n<ol>\n<li><strong>Eigen-D\u00e9composer<\/strong> Le Hessian absolu&nbsp;: H_abs = V \u00b7 \u03bb \u00b7 V\u1d40, o\u00f9 \u03bb d\u00e9tient des valeurs propres et V contient des vecteurs propres<\/li>\n<li><strong>construisez la m\u00e9trique<\/strong>&nbsp;: m = v \u00b7 |\u03bb| \u00b7 V\u1d40, o\u00f9 |\u03bb| est la matrice diagonale des magnitudes de valeurs propres<\/li>\n<\/ol>\n<p>Le tenseur m\u00e9trique encode les tailles et orientations d'\u00e9l\u00e9ments souhait\u00e9es. Chaque entr\u00e9e diagonale dans |\u03bb| D\u00e9finit la r\u00e9solution souhait\u00e9e dans cette direction - des valeurs propres plus grandes signifient une r\u00e9solution plus fine. Les vecteurs propres (colonnes de V) d\u00e9finissent l'orientation&nbsp;: les \u00e9l\u00e9ments doivent s'\u00e9tirer le long du vecteur propre associ\u00e9 \u00e0 la plus grande valeur propre.<\/p>\n<p><strong>En pratique<\/strong>&nbsp;: le tenseur m\u00e9trique est une matrice sym\u00e9trique positive-d\u00e9finie. Ses valeurs propres d\u00e9finissent la taille des \u00e9l\u00e9ments (la racine carr\u00e9e inverse donne l'espacement souhait\u00e9), et ses vecteurs propres d\u00e9finissent l'orientation de l'\u00e9l\u00e9ment. La m\u00e9trique est \u00e9valu\u00e9e \u00e0 chaque n\u0153ud de maillage et utilis\u00e9e lors du remaillage.<\/p>\n<blockquote><p><strong>Source<\/strong>&nbsp;: le rapport technique Polimi fournit une d\u00e9rivation d\u00e9taill\u00e9e du tenseur m\u00e9trique \u00e0 partir des valeurs propres absolues\/vecteurs propres de Hessian, y compris les formules de dimensionnement d'\u00e9l\u00e9ments bas\u00e9es sur l'\u00e9quidistribution. Voir : <a href=\"https:\/\/www.mate.polimi.it\/biblioteca\/add\/qmox\/35-2025.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Polimi Report (35-2025)<\/a><\/p><\/blockquote>\n<h3>\u00c9tape&nbsp;3&nbsp;: Remaillage<\/h3>\n<p>Avec le champ m\u00e9trique calcul\u00e9 sur le maillage, le remaillage suit. Le Remesher utilise le tenseur m\u00e9trique \u00e0 chaque n\u0153ud pour d\u00e9terminer la taille et l'orientation de l'\u00e9l\u00e9ment. Les forfaits standards sont :<\/p>\n<ul>\n<li><strong>BAMG<\/strong> (G\u00e9n\u00e9rateur de maillage adaptatif de limite) - la biblioth\u00e8que C++ classique<\/li>\n<li><strong>MmgTools<\/strong> \u2014 L'emballage moderne avec prise en charge de l'API Python. Consultez la <a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">mmgtools Adaptation Tutoriel<\/a><\/li>\n<\/ul>\n<p>Lors du remaillage, le maillage respecte la m\u00e9trique&nbsp;: il \u00e9tend les \u00e9l\u00e9ments le long de la direction principale (la plus grande valeur propre, le vecteur), affine l\u00e0 o\u00f9 les valeurs propres sont grandes et grossi\u00e8res l\u00e0 o\u00f9 elles sont petites. Le r\u00e9sultat est un maillage align\u00e9 avec la structure de la solution.<\/p>\n<h3>Une note sur l'\u00e9change de bords<\/h3>\n<p>Lorsque le tenseur m\u00e9trique dicte un fort \u00e9tirement directionnel, la connectivit\u00e9 du maillage local peut se d\u00e9grader. Les \u00e9l\u00e9ments deviennent tr\u00e8s asym\u00e9triques et les chutes de qualit\u00e9 maill\u00e9e. <strong>Echange de bords<\/strong> corrige ce probl\u00e8me.<\/p>\n<p>L'\u00e9change de bords remplace un bord dans un \u00e9l\u00e9ment t\u00e9tra\u00e9drique (ou triangulaire) avec un bord diff\u00e9rent, maintenant une connectivit\u00e9 d'\u00e9l\u00e9ment valide tout en r\u00e9duisant l'asym\u00e9trie. MMGTools met en \u0153uvre cinq outils de minimisation locaux \u00e0 cette fin, notamment des \u00e9changes de bords, des ajouts\/suppressions de sommets et une relocalisation des sommets, sp\u00e9cifiquement pour pr\u00e9server la qualit\u00e9 du maillage lorsque le tenseur m\u00e9trique exige une anisotropie extr\u00eame.<\/p>\n<p><strong>Sautez les bords de l'\u00e9change et la qualit\u00e9 de votre maillage se d\u00e9grade.<\/strong> La m\u00e9trique indiquera au maille d'\u00e9tirer les \u00e9l\u00e9ments, mais sans les op\u00e9rateurs de connectivit\u00e9 locaux, ces \u00e9l\u00e9ments \u00e9tir\u00e9s deviennent inutilisables pour le solveur. L'\u00e9change de bords n'est pas facultatif lors de l'utilisation d'une forte adaptation bas\u00e9e sur la m\u00e9trique.<\/p>\n<hr>\n<h2>Estimateurs d'erreurs&nbsp;: bas\u00e9 sur la r\u00e9cup\u00e9ration ou ax\u00e9 sur les objectifs<\/h2>\n<p>Avant toute adaptation, vous avez besoin d'une estimation d'erreur. O\u00f9 est la solution erron\u00e9e&nbsp;? Deux familles d'estimateurs dominent la litt\u00e9rature.<\/p>\n<h3>Estimation bas\u00e9e sur la r\u00e9cup\u00e9ration<\/h3>\n<p>Les estimateurs bas\u00e9s sur la r\u00e9cup\u00e9ration (\u00e9galement appel\u00e9s r\u00e9siduels ou de type ZZ) calculent l'erreur en comparant la solution num\u00e9rique \u00e0 une solution \"r\u00e9cup\u00e9r\u00e9e\" de meilleure qualit\u00e9.<\/p>\n<p><strong>Comment \u00e7a marche<\/strong>&nbsp;:<\/p>\n<ol>\n<li>Calculer la solution num\u00e9rique sur le maillage actuel<\/li>\n<li>Reconstruire une version plus lisse de la solution (r\u00e9cup\u00e9rer les gradients, reconstruire un champ d'ordre sup\u00e9rieur)<\/li>\n<li>La diff\u00e9rence entre les deux est l'indicateur d'erreur<\/li>\n<\/ol>\n<p><strong>L'estimateur Formaggia-Perotto<\/strong> en est l'exemple canonique. Formaggia &amp; Micheletti (2004) a combin\u00e9 la r\u00e9cup\u00e9ration de Zienkiewicz-Zhu avec des estimations d'interpolation anisotrope pour produire un estimateur d'erreur robuste pour les probl\u00e8mes d'advection-diffusion-r\u00e9action. Il est 151-cit\u00e9, largement utilis\u00e9 et simple \u00e0 mettre en \u0153uvre.<\/p>\n<p><strong>Pros<\/strong>&nbsp;: efficace en termes de calcul, bien \u00e9tabli, ne n\u00e9cessite pas de r\u00e9solution d'\u00e9quations suppl\u00e9mentaires<br> <strong>Contre<\/strong>&nbsp;: l'estimation des erreurs est ind\u00e9pendante de la solution - elle vous indique o\u00f9 la solution est incorrecte, mais pas comment cette erreur affecte Votre quantit\u00e9 sp\u00e9cifique d'int\u00e9r\u00eat<\/p>\n<p><strong>Source<\/strong>&nbsp;: formaggia &amp; L'article original de Micheletti - <a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/S0168927404000972\" target=\"_blank\" rel=\"nofollow noopener\">Analyse anisotrope d'erreur a posteriori pour les probl\u00e8mes d'advection-diffusion-r\u00e9action<\/a> - reste la principale r\u00e9f\u00e9rence pour le cadre Formaggia-Perotto.<\/p>\n<h3>Estimation ax\u00e9e sur les objectifs (bas\u00e9e adjointe)<\/h3>\n<p>L'estimation ax\u00e9e sur les objectifs (\u00e9galement appel\u00e9e ADJOINT-Based ou \u00e0 double pond\u00e9ration r\u00e9siduelle\/DWR) va encore plus loin. Au lieu de mesurer l'erreur g\u00e9n\u00e9rale, il mesure l'erreur <strong>par rapport \u00e0 une quantit\u00e9 sp\u00e9cifique d'int\u00e9r\u00eat<\/strong> - l'int\u00e9grale qui vous int\u00e9resse r\u00e9ellement.<\/p>\n<p><strong>Comment \u00e7a marche<\/strong>&nbsp;:<\/p>\n<ol>\n<li>D\u00e9finissez votre \"quantit\u00e9 d'int\u00e9r\u00eat\" (p. ex., flux total \u00e0 la sortie, contrainte maximale, temp\u00e9rature int\u00e9gr\u00e9e)<\/li>\n<li>R\u00e9soudre l'\u00e9quation adjointe - une \u00e9quation de sensibilit\u00e9 qui vous indique comment l'erreur de solution affecte votre quantit\u00e9 d'int\u00e9r\u00eat<\/li>\n<li>Le produit de l'erreur primale et de la sensibilit\u00e9 adjointe donne l'estimation des erreurs orient\u00e9es vers un objectif<\/li>\n<\/ol>\n<p>L'article de Wallwork 2019 le d\u00e9montre clairement dans l'\u00e9cosyst\u00e8me FireDrake. La solution Adjoint fournit une <strong>carte de sensibilit\u00e9<\/strong> - les r\u00e9gions o\u00f9 les erreurs sont les plus importantes (valeurs adjacentes \u00e9lev\u00e9es) sont raffin\u00e9es, les r\u00e9gions o\u00f9 les erreurs n'affectent pas votre quantit\u00e9 d'int\u00e9r\u00eat sont corrompues.<\/p>\n<p><strong>Pros<\/strong>&nbsp;: pr\u00e9cision sp\u00e9cifique \u00e0 l'optimisation&nbsp;: l'adaptation concentre les ressources exactement l\u00e0 o\u00f9 elles ont un impact sur votre objectif<br> <strong>Cons<\/strong>&nbsp;: n\u00e9cessite de r\u00e9soudre une \u00e9quation adjointe suppl\u00e9mentaire&nbsp;; informatiquement plus cher; Plus complexe \u00e0 mettre en \u0153uvre<\/p>\n<p><strong>Source<\/strong>&nbsp;: Wallwork&nbsp;2019&nbsp;\u2013 <a\u00a00>Estimation des erreurs orient\u00e9es vers les objectifs et adaptation au maillage pour FireDrake fournit les d\u00e9tails de la mise en \u0153uvre de FireDrake et des conseils pratiques.<\/a\u00a00><\/p>\n<h3>Quand choisir lequel<\/h3>\n<table>\n<thead>\n<tr>\n<th>Situation<\/th>\n<th>Estimateur recommand\u00e9<\/th>\n<th>Pourquoi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Am\u00e9lioration g\u00e9n\u00e9rale de la pr\u00e9cision<\/td>\n<td>Bas\u00e9 sur la r\u00e9cup\u00e9ration (Formaggia-Perotto, ZZ)<\/td>\n<td>Simple, rapide, bien \u00e9tabli<\/td>\n<\/tr>\n<tr>\n<td>Votre objectif est une valeur int\u00e9grale ou un champ sp\u00e9cifique<\/td>\n<td>Orient\u00e9 vers les objectifs (Adjoint\/DWR)<\/td>\n<td>s'adapte pr\u00e9cis\u00e9ment l\u00e0 o\u00f9 \u00e7a compte<\/td>\n<\/tr>\n<tr>\n<td>Budget de calcul limit\u00e9<\/td>\n<td>Bas\u00e9 sur la r\u00e9cup\u00e9ration<\/td>\n<td>Une solution, une adaptation<\/td>\n<\/tr>\n<tr>\n<td>Simulation \u00e0 enjeux \u00e9lev\u00e9s o\u00f9 chaque DOF compte<\/td>\n<td>ax\u00e9 sur les objectifs<\/td>\n<td>\u00c9vite de gaspiller la r\u00e9solution sur des r\u00e9gions non pertinentes<\/td>\n<\/tr>\n<tr>\n<td>Quantit\u00e9 inconnue d'int\u00e9r\u00eat<\/td>\n<td>Bas\u00e9 sur la r\u00e9cup\u00e9ration<\/td>\n<td>Aucun annexe n\u00e9cessaire, couverture des erreurs large<\/td>\n<\/tr>\n<tr>\n<td>Probl\u00e8me d'optimisation ou de conception<\/td>\n<td>ax\u00e9 sur les objectifs<\/td>\n<td>adapt\u00e9 \u00e0 votre fonction objectif<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote><p><strong>Notre recommandation<\/strong>&nbsp;: commencez par une estimation bas\u00e9e sur la r\u00e9cup\u00e9ration. Il est plus simple, bien document\u00e9 et fonctionne bien dans la plupart des cas. Passez \u00e0 une adaptation ax\u00e9e sur les objectifs lorsque vous avez une quantit\u00e9 sp\u00e9cifique d'int\u00e9r\u00eat et que vous pouvez justifier la r\u00e9solution des frais g\u00e9n\u00e9raux. L'exemple Wallwork 2019 Firedrake est une excellente r\u00e9f\u00e9rence si vous choisissez le chemin ax\u00e9 sur les objectifs.<\/p><\/blockquote>\n<hr>\n<h2>Mod\u00e8les de mise en \u0153uvre<\/h2>\n<p>La th\u00e9orie est claire. La mise en \u0153uvre est l'endroit o\u00f9 le caoutchouc rencontre la route. Couvrir les principaux mod\u00e8les de diff\u00e9rents \u00e9cosyst\u00e8mes.<\/p>\n<h3>\u00c9change de bords et BAMG\/MMGTools<\/h3>\n<p>BAMG (Boundary Adaptive Mesh Generator) est la biblioth\u00e8que C++ originale pour l'adaptation anisotrope bas\u00e9e sur la m\u00e9trique. MMGTools l'a modernis\u00e9 avec une API Python et un outil de ligne de commande.<\/p>\n<p><strong>Le flux de travail MMGTools<\/strong>&nbsp;:<\/p>\n<ol>\n<li>Calculez le champ m\u00e9trique (Hessian \u2192 Tensor) sur votre maillage<\/li>\n<li>Exporter la m\u00e9trique sous la forme d'un fichier lisible par MMG<\/li>\n<li>Ex\u00e9cutez <code>mmg2d -h1 mesh.in<\/code> (ou <code>mmg3d<\/code> pour la 3D) avec <code>-hs<\/code> des drapeaux pour le dimensionnement anisotrope<\/li>\n<li>L'outil lit la m\u00e9trique, effectue un \u00e9change de bords et g\u00e9n\u00e8re un maillage adapt\u00e9<\/li>\n<\/ol>\n<p>Le didacticiel MMGTools \u00e0 <a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">mmgtools.org\/tutorials<\/a> couvre l'utilisation de la ligne de commande et l'API Python. C'est le guide le plus pratique pour passer du tenseur m\u00e9trique au maillage adapt\u00e9.<\/p>\n<h3>Animer \/ Firedrake<\/h3>\n<p>Animate est un pipeline natif Python complet pour une adaptation anisotrope bas\u00e9e sur des m\u00e9triques. Il est construit sur FireDrake et s'int\u00e8gre \u00e0 Pragmatic (le backend parall\u00e8le anisotrope de maillage de maillage).<\/p>\n<p><strong>Le flux de travail d'animation<\/strong>&nbsp;:<\/p>\n<ol>\n<li>Cr\u00e9er un maillage FireDrake initial<\/li>\n<li>R\u00e9solvez votre PDE pour obtenir le champ scalaire<\/li>\n<li>Calculer le tenseur m\u00e9trique de la solution Hessian<\/li>\n<li>D\u00e9finir un champ m\u00e9trique sur le maillage<\/li>\n<li>Appelez la transformation de maillage d'Animate&nbsp;: le maillage s'adapte tout en pr\u00e9servant le champ<\/li>\n<\/ol>\n<p>Animate propose deux modules :<\/p>\n<ul>\n<li><strong>Mouvement<\/strong>&nbsp;: strat\u00e9gies de mouvement de maillage (remappage lisse des champs sur des maillages adapt\u00e9s)<\/li>\n<li><strong>Goalie<\/strong>&nbsp;: adaptation ax\u00e9e sur les objectifs avec des solveurs adjoints<\/li>\n<\/ul>\n<blockquote><p><strong>Source<\/strong>&nbsp;: Animer les documents \u2014 <a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">mesh-adaptation.github.io<\/a> \u2014 et pragmatique \u2014 <a href=\"https:\/\/github.com\/meshadaptation\/pragmatic\" target=\"_blank\" rel=\"nofollow noopener\">MeshAdaptation\/Pragmatic sur GitHub<\/a> \u2014 Fournir le pipeline natif Python complet. Il s'agit de la meilleure r\u00e9f\u00e9rence pour les chercheurs bas\u00e9s sur Python.<\/p><\/blockquote>\n<h3>Deal.II Comparaison<\/h3>\n<p>Deal.II g\u00e8re le raffinement anisotrope en natif via ses drapeaux <code>RefinementCase::cut_x\/y\/z<\/code>. Le didacticiel STEP-30 est l'exemple canonique :<\/p>\n<ul>\n<li>Le didacticiel r\u00e9sout l'\u00e9quation de transport lin\u00e9aire \u00e0 l'aide de DG<\/li>\n<li>Le raffinement anisotrope utilise <code>RefinementCase::cut_x<\/code> (et y\/z en 3D) pour affiner uniquement dans le sens du flux<\/li>\n<li>L'algorithme d'indicateur de saut identifie les gradients align\u00e9s sur les flux et divise les \u00e9l\u00e9ments en cons\u00e9quence<\/li>\n<li>Sortie : 4&nbsp;120 DOF (anisotrope) contre 16&nbsp;076 (isotrope) au cycle&nbsp;5<\/li>\n<\/ul>\n<p>L'approche de Deal.II est <strong>plus grossi\u00e8re, pas plus fine<\/strong>&nbsp;: elle ne se r\u00e9sume pas, elle affine les \u00e9l\u00e9ments existants dans des directions sp\u00e9cifiques. Ceci est efficace pour les maillages structur\u00e9s ou semi-structur\u00e9s, mais moins flexibles que le remaillage bas\u00e9 sur des m\u00e9triques pour les cas non structur\u00e9s.<\/p>\n<blockquote><p><strong>Related<\/strong>&nbsp;: notre [discontinuous Galerkin tutorial](https:\/\/matforge.org\/discontinus-galerkin-method-tutorial\/){rel=\"nofollow\" target=\"_blank\"} couvre la discr\u00e9tisation de la DG, qui est g\u00e9n\u00e9ralement coupl\u00e9e avec un raffinement anisotrope dans les probl\u00e8mes domin\u00e9s par l'advection.<\/p><\/blockquote>\n<hr>\n<h2>Quand utiliser Anisotrope vs isotrope<\/h2>\n<p>Tous les probl\u00e8mes ne b\u00e9n\u00e9ficient pas de l'adaptation anisotrope. Voici le cadre de d\u00e9cision :<\/p>\n<table>\n<thead>\n<tr>\n<th>Situation<\/th>\n<th>strat\u00e9gie recommand\u00e9e<\/th>\n<th>Pourquoi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Direction de flux connue et coh\u00e9rente<\/td>\n<td><strong>Anisotrope<\/strong><\/td>\n<td>R\u00e9duction 4\u00d7-30\u00d7DoF, align\u00e9e sur la physique<\/td>\n<\/tr>\n<tr>\n<td>La direction d'\u00e9coulement varie dans l'espace<\/td>\n<td><strong>Mixte<\/strong> (anisotrope dans les r\u00e9gions de flux, isotrope ailleurs)<\/td>\n<td>Capture la directionnalit\u00e9 l\u00e0 o\u00f9 \u00e7a compte<\/td>\n<\/tr>\n<tr>\n<td>Direction du flux Inconnu<\/td>\n<td><strong>isotrope<\/strong><\/td>\n<td>Ne devinez pas&nbsp;; s'adapter de mani\u00e8re conservatrice<\/td>\n<\/tr>\n<tr>\n<td>Solution lisse, pas de gradients nets<\/td>\n<td><strong>isotrope<\/strong><\/td>\n<td>Aucune structure directionnelle \u00e0 exploiter<\/td>\n<\/tr>\n<tr>\n<td>Simulation 3D, calculez bien le budget<\/td>\n<td><strong>Anisotrope<\/strong><\/td>\n<td>O(n\u00b3) isotrope est prohibitif ; \u00c9chelles anisotropes mieux<\/td>\n<\/tr>\n<tr>\n<td>Validation des recherches, comparaison de base<\/td>\n<td><strong>Ex\u00e9cutez les deux<\/strong><\/td>\n<td>documenter la diff\u00e9rence; Justifiez votre choix<\/td>\n<\/tr>\n<tr>\n<td>La qualit\u00e9 du maillage est d\u00e9j\u00e0 m\u00e9diocre<\/td>\n<td><strong>D'abord isotrope<\/strong> (alors anisotrope)<\/td>\n<td>Fixer la qualit\u00e9 avant l'adaptation<\/td>\n<\/tr>\n<tr>\n<td>Adaptation ax\u00e9e sur les objectifs disponible<\/td>\n<td><strong>Anisotrope ax\u00e9e sur les objectifs<\/strong><\/td>\n<td>adapt\u00e9 \u00e0 votre quantit\u00e9 d'int\u00e9r\u00eat<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote><p><strong>Notre recommandation<\/strong>&nbsp;: lorsque vous connaissez la direction du flux et que la solution a des gradients nets align\u00e9s, <strong>l'adaptation anisotrope devrait \u00eatre votre strat\u00e9gie par d\u00e9faut<\/strong>. Le raffinement isotrope est le repli - utilisez-le lorsque le sens du flux varie, lorsque vous ne pouvez pas calculer la m\u00e9trique de mani\u00e8re fiable ou lors de la validation des r\u00e9sultats de base.<\/p><\/blockquote>\n<hr>\n<h2>Flux de travail pratique : du z\u00e9ro au maillage adapt\u00e9<\/h2>\n<p>Voici un flux de travail concret que vous pouvez suivre. Nous utiliserons le pipeline Animate\/Firedrake comme exemple natif de Python, mais les \u00e9tapes s'appliquent \u00e0 travers les \u00e9cosyst\u00e8mes.<\/p>\n<h3>\u00c9tape&nbsp;1&nbsp;: G\u00e9n\u00e9rer un maillage initial<\/h3>\n<p>Commencez par un maillage grossier et isotrope. Vous n'avez pas besoin de raffinement \u00e0 ce stade, ce n'est que votre point de d\u00e9part.<\/p>\n<pre><code class=\"language-python\">from firedrake import *\n\n# Simple 2D domain\nmesh = MeshRectangle(4.0, 2.0, 20, 10)  # 20\u00d710 initial cells\n<\/code><\/pre>\n<h3>\u00c9tape&nbsp;2&nbsp;: R\u00e9solvez la PDE<\/h3>\n<p>R\u00e9solvez votre probl\u00e8me domin\u00e9 par l'advection sur le maillage initial.<\/p>\n<pre><code class=\"language-python\"># Define function space, trial\/test functions\nV = FunctionSpace(mesh, \"DG\", 1)\nu = Function(V, name=\"u\")\n\n# Solve your equation...\n# (example: advection-diffusion with DG)\n<\/code><\/pre>\n<h3>\u00c9tape&nbsp;3&nbsp;: Calculez le tenseur m\u00e9trique<\/h3>\n<p>Extrayez la Hesse de la solution et convertissez-la en champ m\u00e9trique.<\/p>\n<pre><code class=\"language-python\"># Compute the Hessian (numerical gradient of gradient)\nH = Function(V).project(grad(u))  # simplified\n\n# Construct metric tensor from absolute Hessian eigenvalues\/eigenvectors\n# (full derivation in Alauzet 2016, Eq. 3.2+)\n<\/code><\/pre>\n<h3>\u00c9tape&nbsp;4&nbsp;: D\u00e9finir le champ de mesure<\/h3>\n<p>Mappez le tenseur m\u00e9trique sur les n\u0153uds de maillage.<\/p>\n<pre><code class=\"language-python\">from animate import MetricField\n\nmetric_field = MetricField(mesh, metric_tensor)\n<\/code><\/pre>\n<h3>\u00c9tape&nbsp;5&nbsp;: Adaptez le maillage<\/h3>\n<p>Appelez la routine d'adaptation. Animate g\u00e8re le remaillage, l'\u00e9change de bord et l'interpolation sur le terrain.<\/p>\n<pre><code class=\"language-python\">from animate import Movement\n\nmesh = Movement.apply(mesh, metric_field)\n<\/code><\/pre>\n<p>Le maillage est maintenant adapt\u00e9 : les \u00e9l\u00e9ments sont \u00e9tir\u00e9s le long de la direction d'\u00e9coulement, raffin\u00e9s l\u00e0 o\u00f9 la solution a des gradients pointus et grossiers l\u00e0 o\u00f9 la solution est lisse. Le champ de solution est interpol\u00e9 sur le nouveau maillage.<\/p>\n<h3>\u00c9tape&nbsp;6&nbsp;: R\u00e9solution (facultatif)<\/h3>\n<p>Avec le maillage adapt\u00e9, relancez votre simulation. La solution doit converger plus rapidement (moins de DOF) et produire la m\u00eame pr\u00e9cision que la ligne de base isotrope.<\/p>\n<h3>\u00c9tape&nbsp;7&nbsp;: It\u00e9rer<\/h3>\n<p>L'adaptation est g\u00e9n\u00e9ralement it\u00e9rative. Vous r\u00e9solvez, adaptez, r\u00e9solvez et r\u00e9p\u00e9tez jusqu'\u00e0 ce que le maillage converge. Le pipeline Animate est con\u00e7u pour plusieurs cycles d'adaptation.<\/p>\n<blockquote><p><strong>Source<\/strong>&nbsp;: Animer les documents \u2014 <a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">mesh-adaptation.github.io<\/a> \u2014 Couvrez le pipeline complet du maillage initial au maillage adapt\u00e9. Le flux de travail ci-dessus suit leur s\u00e9quence recommand\u00e9e.<\/p><\/blockquote>\n<hr>\n<h2>Qu'en est-il de la qualit\u00e9 du maillage&nbsp;?<\/h2>\n<p>Voici un point \u00e0 souligner&nbsp;: <strong>La qualit\u00e9 du maillage d\u00e9termine si votre maillage adapt\u00e9 fonctionne m\u00eame<\/strong>.<\/p>\n<p>Si vous suivez le <a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\" target=\"_blank\" rel=\"nofollow noopener\">guide de la qualit\u00e9 du maillage<\/a>, vous saurez Les six mesures de qualit\u00e9 (qualit\u00e9 orthogonale, asym\u00e9trie, rapport d'aspect, rapport jacobien, rapport volum\u00e9trique et limites d'angle). Le raffinement anisotrope modifie consid\u00e9rablement les rapports d'aspect - les \u00e9l\u00e9ments sont \u00e9tir\u00e9s. C'est intentionnel. Mais les <strong>Autres<\/strong> doivent rester dans des limites de s\u00e9curit\u00e9.<\/p>\n<p><strong>La r\u00e8gle cl\u00e9<\/strong>&nbsp;: le raffinement anisotrope ne doit pas d\u00e9grader l'asym\u00e9trie, le rapport jacobien ou les angles minimums au-del\u00e0 des seuils acceptables. L'\u00e9change de bord existe pour cette raison.<\/p>\n<hr>\n<h2>erreurs courantes et comment les \u00e9viter<\/h2>\n<h3>Erreur n\u00b0&nbsp;1&nbsp;: sauter les bords<\/h3>\n<p><strong>Ce qui se passe<\/strong>&nbsp;: le tenseur m\u00e9trique \u00e9tend les \u00e9l\u00e9ments le long du flux. Sans \u00e9change de bords, ces \u00e9l\u00e9ments \u00e9tir\u00e9s deviennent tr\u00e8s biais\u00e9s. Votre rapport sur la qualit\u00e9 du maillage affiche des avertissements rouges et votre solveur se d\u00e9bat ou diverge.<\/p>\n<p><strong>Comment l'\u00e9viter<\/strong>&nbsp;: Incluez toujours l'\u00e9change de bords dans votre pipeline d'adaptation. MMGTools met en \u0153uvre cinq outils de minimisation locaux pour cela. Dans Deal.II, l'approche <code>RefinementCase::cut_x\/y\/z<\/code> \u00e9vite le probl\u00e8me en affinant les \u00e9l\u00e9ments existants plut\u00f4t qu'en remassant.<\/p>\n<h3>Erreur #2 : Utilisation du raffinement isotrope pour les probl\u00e8mes directionnels<\/h3>\n<p><strong>Ce qui se passe<\/strong>&nbsp;: vous affinez partout de la m\u00eame mani\u00e8re. Vos DOF poussent comme O(N\u00b2) en 2D ou O(N\u00b3) en 3D. La simulation s'ex\u00e9cute plus longtemps et l'am\u00e9lioration de la pr\u00e9cision est marginale. Vous gaspillez des ressources de calcul sur des r\u00e9gions o\u00f9 la solution est d\u00e9j\u00e0 fluide.<\/p>\n<p><strong>Comment l'\u00e9viter<\/strong>&nbsp;: ex\u00e9cutez d'abord un cycle d'adaptation anisotrope. Comparez le nombre de DOF. Si le maillage anisotrope atteint la m\u00eame pr\u00e9cision avec moins de DOF (et c'est presque toujours le cas pour les probl\u00e8mes domin\u00e9s par l'advection), utilisez-le.<\/p>\n<h3>Erreur n\u00b0&nbsp;3&nbsp;: confusion des estimateurs bas\u00e9s sur la r\u00e9cup\u00e9ration et ax\u00e9s sur les objectifs<\/h3>\n<p><strong>Ce qui se passe<\/strong>&nbsp;: vous utilisez un estimateur bas\u00e9 sur la r\u00e9cup\u00e9ration, mais attendez-vous \u00e0 une pr\u00e9cision ax\u00e9e sur les objectifs. L'adaptation am\u00e9liore la pr\u00e9cision de la solution, mais votre quantit\u00e9 d'int\u00e9r\u00eat sp\u00e9cifique ne s'am\u00e9liore pas comme pr\u00e9vu. Vous \u00eates confus.<\/p>\n<p><strong>Comment l'\u00e9viter<\/strong>&nbsp;: faites correspondre l'estimateur \u00e0 votre objectif. Si vous voulez une am\u00e9lioration g\u00e9n\u00e9rale de la pr\u00e9cision, utilisez la r\u00e9cup\u00e9ration (formaggia-perotto, zz). Si vous souhaitez optimiser une int\u00e9grale ou une valeur de champ sp\u00e9cifique, utilisez un objectif orient\u00e9 (Adjoint\/DWR). Ils ont des objectifs diff\u00e9rents.<\/p>\n<h3>Erreur #4&nbsp;: supposer que l'adaptation est une op\u00e9ration unique<\/h3>\n<p><strong>Ce qui se passe<\/strong>&nbsp;: vous vous adaptez une fois, r\u00e9solvez une fois et arr\u00eatez. Le maillage est \"assez bon\", mais vous pourriez obtenir une meilleure pr\u00e9cision avec un autre cycle. La solution n'a pas compl\u00e8tement converg\u00e9 vers le maillage adapt\u00e9.<\/p>\n<p><strong>Comment l'\u00e9viter<\/strong>&nbsp;: ex\u00e9cutez plusieurs cycles d'adaptation. Apr\u00e8s chaque cycle, r\u00e9solvez, calculez la nouvelle m\u00e9trique et r\u00e9adaptez-vous. Arr\u00eatez lorsque les changements de maillage sont n\u00e9gligeables entre les cycles (convergence de maillage).<\/p>\n<h3>Erreur #5 : Utilisation de l'adaptation anisotrope sur des solutions fluides<\/h3>\n<p><strong>Ce qui se passe<\/strong>&nbsp;: la solution est fluide partout. Vous calculez le tenseur m\u00e9trique. Toutes les valeurs propres sont petites. L'adaptation ne change rien de significatif. Vous avez perdu du temps.<\/p>\n<p><strong>Comment l'\u00e9viter<\/strong>&nbsp;: v\u00e9rifiez d'abord la structure de la solution. Si les gradients sont petits et lisses partout, le raffinement isotrope ou m\u00eame votre maillage initial est suffisant. L'adaptation anisotrope ne porte ses fruits que lorsqu'il y a une structure directionnelle \u00e0 exploiter.<\/p>\n<hr>\n<h2>Une comparaison rapide DOF<\/h2>\n<p>Revenons aux chiffres. Voici un r\u00e9sum\u00e9 visuel des donn\u00e9es de l'accord.II STEP-30&nbsp;:<\/p>\n<div style=\"text-align: center; margin: 2rem 0;\">\n<!-- Isotropic bar --><p><\/p>\n<p>16&nbsp;076&nbsp;DOF<br>&nbsp;Isotrope&nbsp;:<br> <!-- Barre anisotrope --><\/p>\n<p>4&nbsp;120&nbsp;DOF<br> Anisotrope&nbsp;:<br> <!-- Annotation --><br> 4&nbsp;\u00d7 moins de degr\u00e9s de libert\u00e9 pour la m\u00eame pr\u00e9cision<br> (Deal.ii step-30, \u00e9quation de transport lin\u00e9aire)<\/p><\/div>\n<p>L'approche isotrope utilise pr\u00e8s de <strong>quatre fois plus de degr\u00e9s de libert\u00e9<\/strong>. En 3D, ces chiffres s'aggravent de fa\u00e7on spectaculaire - la litt\u00e9rature rapporte des diff\u00e9rences de 15 \u00e0 30 \u00d7 pour les couches domin\u00e9es par l'advection. Le co\u00fbt du raffinement isotrope est prohibitif pour les simulations \u00e0 grande \u00e9chelle.<\/p>\n<hr>\n<h2>Adaptation ax\u00e9e sur les objectifs : la fronti\u00e8re avanc\u00e9e<\/h2>\n<p>Si l'estimation bas\u00e9e sur la r\u00e9cup\u00e9ration est la norme, l'adaptation ax\u00e9e sur les objectifs est la fronti\u00e8re. Il pose une question plus sp\u00e9cifique&nbsp;: \"o\u00f9 l'erreur de solution affecte-t-elle la quantit\u00e9 qui me tient \u00e0 c\u0153ur&nbsp;?\"<\/p>\n<p>Le papier Firedrake 2019 de Wallwork montre le flux de travail :<\/p>\n<ol>\n<li><strong>D\u00e9finir votre quantit\u00e9 d'int\u00e9r\u00eat<\/strong> \u2014 par exemple, flux total \u00e0 travers une limite de sortie, concentration maximale en un point<\/li>\n<li><strong>R\u00e9soudre l'\u00e9quation adjointe<\/strong> - l'\u00e9quation de sensibilit\u00e9 qui vous indique comment les erreurs se propagent \u00e0 votre quantit\u00e9 d'int\u00e9r\u00eat<\/li>\n<li><strong>Calculez le r\u00e9siduel pond\u00e9r\u00e9<\/strong> - le produit de l'erreur primitive et de la sensibilit\u00e9 adjointe donne l'estimation des erreurs orient\u00e9es vers un objectif<\/li>\n<li><strong>Adapter<\/strong> \u2014 Affiner l\u00e0 o\u00f9 la sensibilit\u00e9 adjointe et l'erreur primaire sont toutes deux importantes<\/li>\n<\/ol>\n<p>Le r\u00e9sultat est <strong>adaptation sp\u00e9cifique \u00e0 l'optimisation<\/strong>. Les r\u00e9gions qui n'affectent pas votre quantit\u00e9 d'int\u00e9r\u00eat deviennent grossi\u00e8res. Les r\u00e9gions qui s'affinent de mani\u00e8re agressive. Le compromis&nbsp;: vous devez r\u00e9soudre l'\u00e9quation adjointe (une solution suppl\u00e9mentaire) et la mise en \u0153uvre est plus complexe.<\/p>\n<blockquote><p><strong>Quand l'utiliser<\/strong>&nbsp;: lorsque votre simulation a une m\u00e9trique cible claire&nbsp;: flux total, production int\u00e9gr\u00e9e, pression maximale. Lorsque chaque degr\u00e9 de libert\u00e9 compte, l'adaptation ax\u00e9e sur les objectifs vaut la peine.<\/p><\/blockquote>\n<hr>\n<h2>Avant de commencer&nbsp;: une liste de contr\u00f4le<\/h2>\n<blockquote><p><strong>Notre recommandation<\/strong>&nbsp;: lors de la r\u00e9solution de probl\u00e8mes domin\u00e9s par l'advection, l'adaptation anisotrope doit \u00eatre votre strat\u00e9gie par d\u00e9faut lorsque la direction du flux est connue. Le raffinement isotrope doit \u00eatre le repli lorsque la direction du flux varie dans l'espace ou est inconnue.<\/p><\/blockquote>\n<p>Avant de lancer une adaptation anisotrope, v\u00e9rifiez :<\/p>\n<ul>\n<li>[ ] <strong>La direction d'\u00e9coulement est connue ou dominante<\/strong> \u2014 le tenseur m\u00e9trique sera directionnel&nbsp;; Le flux isotrope n\u00e9cessite des maillages isotropes<\/li>\n<li>[ ] <strong>Num\u00e9ro de peclet \u00e9lev\u00e9 confirm\u00e9<\/strong> (PE &gt;&gt; 2) \u2014 Si la diffusion domine, le raffinement isotrope est suffisant<\/li>\n<li>[ ] <strong>La qualit\u00e9 du maillage est acceptable<\/strong>&nbsp;: fixer l'asym\u00e9trie, le rapport jacobien et les limites d'angle avant l'adaptation<\/li>\n<li>[ ] <strong>L'\u00e9change de bords est inclus<\/strong> - l'\u00e9tirement directionnel d\u00e9grade la connectivit\u00e9 sans<\/li>\n<li>[ ] <strong>Estimateur choisi<\/strong> \u2014 R\u00e9cup\u00e9ration pour une pr\u00e9cision g\u00e9n\u00e9rale, ax\u00e9e sur les objectifs pour des quantit\u00e9s sp\u00e9cifiques d'int\u00e9r\u00eat<\/li>\n<li>[ ] <strong>Cycles d'adaptation pr\u00e9vus<\/strong> \u2014 Un cycle suffit rarement ; It\u00e9rer jusqu'\u00e0 la convergence du maillage<\/li>\n<\/ul>\n<hr>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>L'adaptation au maillage anisotrope est l'une des techniques les plus efficaces pour les probl\u00e8mes domin\u00e9s par l'advection. Au lieu de raffiner partout de la m\u00eame mani\u00e8re (isotrope), vous \u00e9tirez les \u00e9l\u00e9ments le long de la direction d'\u00e9coulement et grossiers l\u00e0 o\u00f9 la solution est lisse. Les calculs sont simples&nbsp;: calculez le Hesse de la solution, d\u00e9river le tenseur m\u00e9trique de ses valeurs propres et de ses vecteurs propres, et remesh en respectant la m\u00e9trique.<\/p>\n<p>Les chiffres parlent d'eux-m\u00eames. Le didacticiel STEP-30 de Deal.II montre <strong>4&nbsp;120&nbsp;DOF (anisotrope) contre 16&nbsp;076&nbsp;DOF (isotrope)<\/strong> pour la m\u00eame pr\u00e9cision&nbsp;: une r\u00e9duction de 4&nbsp;\u00d7. Les rapports de litt\u00e9rature poussent encore plus : 15 \u00d7 \u00e0 30 \u00d7 moins de degr\u00e9s de libert\u00e9 dans les applications CFD 3D.<\/p>\n<p>Deux familles d'estimateurs ont des objectifs diff\u00e9rents. Les estimateurs bas\u00e9s sur la r\u00e9cup\u00e9ration (formaggia-perotto, zienkiewicz-zhu) sont rapides et bien \u00e9tablis. Les estimateurs ax\u00e9s sur les objectifs (Adjoint\/DWR) sont pr\u00e9cis pour votre quantit\u00e9 d'int\u00e9r\u00eats sp\u00e9cifiques, mais n\u00e9cessitent la r\u00e9solution d'une \u00e9quation suppl\u00e9mentaire. <strong>Echange de bords<\/strong> pr\u00e9serve la qualit\u00e9 du maillage lorsque l'\u00e9tirement directionnel d\u00e9graderait autrement la connectivit\u00e9.<\/p>\n<p>L'\u00e9cosyst\u00e8me Python (anim\u00e9\/drake, pragmatique) rend l'adaptation anisotrope accessible aux chercheurs qui \u00e9crivent Python. Vous n'avez plus besoin d'une exp\u00e9rience approfondie en C++ pour utiliser une adaptation bas\u00e9e sur la m\u00e9trique.<\/p>\n<hr>\n<h2>Prochaines \u00e9tapes<\/h2>\n<ol>\n<li><strong>V\u00e9rifiez le num\u00e9ro de peclet de votre probl\u00e8me<\/strong> \u2014 si PE &gt;&gt; 2, l'adaptation anisotrope est probablement b\u00e9n\u00e9fique<\/li>\n<li><strong>Ex\u00e9cutez deal.ii step-30<\/strong> - suivez le didacticiel et v\u00e9rifiez vous-m\u00eame la r\u00e9duction DOF (4\u00d7 sur l'\u00e9quation de transport lin\u00e9aire)<\/li>\n<li><strong>Essayer Animate\/FireDrake<\/strong> \u2014 Commencez par le pipeline de base&nbsp;: maillage initial \u2192 champ m\u00e9trique \u2192 adaptation<\/li>\n<li><strong>Comparer isotrope vs anisotrope<\/strong> \u2014 Documenter la diff\u00e9rence DOF et l'am\u00e9lioration de la pr\u00e9cision<\/li>\n<li><strong>Consid\u00e9rez une adaptation orient\u00e9e vers un objectif<\/strong> \u2014 Si vous avez une quantit\u00e9 sp\u00e9cifique d'int\u00e9r\u00eat, r\u00e9solvez l'adjoint et adaptez-vous en fonction de sa carte de sensibilit\u00e9<\/li>\n<\/ol>\n<hr>\n<h2>Guides connexes<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/advection-dominated-problems-supg-stabilization\/\" target=\"_blank\" rel=\"nofollow noopener\">probl\u00e8mes domin\u00e9s par advection&nbsp;: sch\u00e9mas au vent et Stabilisation SUPG<\/a> \u2014 Techniques de discr\u00e9tisation pour la m\u00eame classe de probl\u00e8mes<\/li>\n<li><a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\" target=\"_blank\" rel=\"nofollow noopener\">\u00c9tude sur la qualit\u00e9 et la convergence des maillages&nbsp;: une pratique pratique Guide<\/a> \u2014 Mesures de qualit\u00e9 du maillage et v\u00e9rification du raffinement<\/li>\n<li><a href=\"https:\/\/matforge.org\/discontinuous-galerkin-method-tutorial\/\" target=\"_blank\" rel=\"nofollow noopener\">Didacticiel sur la m\u00e9thode Galerkin discontinu<\/a> \u2014 DG est g\u00e9n\u00e9ralement associ\u00e9 \u00e0 un raffinement anisotrope pour les flux domin\u00e9s par l'advection<\/li>\n<\/ul>\n<hr>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/S0168927404000972\" target=\"_blank\" rel=\"nofollow noopener\">Formaggia, L., &amp; Micheletti, M. (2004). Analyse d'erreur a posteriori anisotrope pour les probl\u00e8mes d'advection-diffusion-r\u00e9action. ordinateurs &amp; structures.<\/a><\/li>\n<li><a href=\"https:\/\/inria.hal.science\/hal-01426159\/file\/PrePrint_Alauzet_A%20decade%20of%20progress%20on%20anisotropic%20mesh%20adaptation%20for%20computational%20fluid%20dynamics.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Alauzet, L. (2016). Une d\u00e9cennie de progr\u00e8s sur l'adaptation du maillage anisotrope pour la dynamique des fluides informatiques. ordinateurs &amp; structures.<\/a><\/li>\n<li><a href=\"https:\/\/eartharxiv.org\/repository\/object\/504\/download\/1091\/\" target=\"_blank\" rel=\"nofollow noopener\">Wallwork, A. (2019). Estimation d'erreurs orient\u00e9e objectif et adaptation de maillage pour Firedrake. EarthArxiv.<\/a><\/li>\n<li><a href=\"https:\/\/www.dealii.org\/current\/doxygen\/deal.II\/step_30.html\" target=\"_blank\" rel=\"nofollow noopener\">Deal.II Didacticiel sur l'\u00e9tape 30.<\/a><\/li>\n<li><a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">Documentation Animer\/Firedrake.<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/meshadaptation\/pragmatic\" target=\"_blank\" rel=\"nofollow noopener\">Pragmatique (backend d'adaptation de maillage).<\/a><\/li>\n<li><a href=\"https:\/\/www.mate.polimi.it\/biblioteca\/add\/qmox\/35-2025.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Rapport technique Polimi (35-2025). Estimateurs d'erreurs bas\u00e9s sur la r\u00e9cup\u00e9ration anisotrope et adaptation au maillage.<\/a><\/li>\n<li><a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">Tutoriel d'adaptation de MMGTools.<\/a><\/li>\n<\/ul>\n"},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 16<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>D\u00e9couvrez pourquoi l&rsquo;adaptation au maillage anisotrope r\u00e9duit les degr\u00e9s de libert\u00e9 de 4 \u00e0 30 \u00d7 pour les flux domin\u00e9s par l&rsquo;advection. Couvre les tenseurs m\u00e9triques, les estimateurs d&rsquo;erreurs et la mise en \u0153uvre pratique.<\/p>\n","protected":false,"raw":"D\u00e9couvrez pourquoi l'adaptation au maillage anisotrope r\u00e9duit les degr\u00e9s de libert\u00e9 de 4 \u00e0 30 \u00d7 pour les flux domin\u00e9s par l'advection. Couvre les tenseurs m\u00e9triques, les estimateurs d'erreurs et la mise en \u0153uvre pratique."},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"fr_FR","_original_post":"https:\/\/matforge.org\/?p=534","iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[26,57,55,54,56],"class_list":["post-1221","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","tag-advection","tag-anisotropic-refinement","tag-finite-elements","tag-firedrake","tag-mesh-adaptation","fr-FR"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Adaptation du maillage anisotrope pour les flux domin\u00e9s par l&#039;advection - matforge.org<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Adaptation du maillage anisotrope pour les flux domin\u00e9s par l&#039;advection - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  16 minutesD\u00e9couvrez pourquoi l&#039;adaptation au maillage anisotrope r\u00e9duit les degr\u00e9s de libert\u00e9 de 4 \u00e0 30 \u00d7 pour les flux domin\u00e9s par l&#039;advection. Couvre les tenseurs m\u00e9triques, les estimateurs d&#039;erreurs et la mise en \u0153uvre pratique.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-21T14:28:42+00:00\" \/>\n<meta name=\"author\" content=\"Tomas Delgado\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomas Delgado\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"27 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/\"},\"author\":{\"name\":\"Tomas Delgado\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"headline\":\"Adaptation du maillage anisotrope pour les flux domin\u00e9s par l&rsquo;advection\",\"datePublished\":\"2026-08-21T14:28:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/\"},\"wordCount\":5412,\"commentCount\":0,\"keywords\":[\"avancement\",\"Raffinement anisotrope\",\"finite elements\",\"Firedrake\",\"mesh adaptation\"],\"articleSection\":[\"Simulation &amp; Projets de mod\u00e9lisation\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/fr\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/\",\"name\":\"Adaptation du maillage anisotrope pour les flux domin\u00e9s par l'advection - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-08-21T14:28:42+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Adaptation du maillage anisotrope pour les flux domin\u00e9s par l&#8217;advection\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\",\"url\":\"https:\\\/\\\/matforge.org\\\/\",\"name\":\"matforge.org\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/matforge.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\",\"name\":\"Tomas Delgado\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"caption\":\"Tomas Delgado\"},\"sameAs\":[\"http:\\\/\\\/matforge.org\"],\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/tomas-delgado\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Adaptation du maillage anisotrope pour les flux domin\u00e9s par l'advection - matforge.org","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/","og_locale":"fr_FR","og_type":"article","og_title":"Adaptation du maillage anisotrope pour les flux domin\u00e9s par l'advection - matforge.org","og_description":"Reading Time:  16 minutesD\u00e9couvrez pourquoi l'adaptation au maillage anisotrope r\u00e9duit les degr\u00e9s de libert\u00e9 de 4 \u00e0 30 \u00d7 pour les flux domin\u00e9s par l'advection. Couvre les tenseurs m\u00e9triques, les estimateurs d'erreurs et la mise en \u0153uvre pratique.","og_url":"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/","og_site_name":"matforge.org","article_published_time":"2026-08-21T14:28:42+00:00","author":"Tomas Delgado","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Tomas Delgado","Dur\u00e9e de lecture estim\u00e9e":"27 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/"},"author":{"name":"Tomas Delgado","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"headline":"Adaptation du maillage anisotrope pour les flux domin\u00e9s par l&rsquo;advection","datePublished":"2026-08-21T14:28:42+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/"},"wordCount":5412,"commentCount":0,"keywords":["avancement","Raffinement anisotrope","finite elements","Firedrake","mesh adaptation"],"articleSection":["Simulation &amp; Projets de mod\u00e9lisation"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/","url":"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/","name":"Adaptation du maillage anisotrope pour les flux domin\u00e9s par l'advection - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-08-21T14:28:42+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"breadcrumb":{"@id":"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/fr\/anisotropic-mesh-adaptation-advection-dominated-flows\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/"},{"@type":"ListItem","position":2,"name":"Adaptation du maillage anisotrope pour les flux domin\u00e9s par l&#8217;advection"}]},{"@type":"WebSite","@id":"https:\/\/matforge.org\/#website","url":"https:\/\/matforge.org\/","name":"matforge.org","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/matforge.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061","name":"Tomas Delgado","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","caption":"Tomas Delgado"},"sameAs":["http:\/\/matforge.org"],"url":"https:\/\/matforge.org\/author\/tomas-delgado\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=1221"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1221\/revisions"}],"predecessor-version":[{"id":1369,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1221\/revisions\/1369"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=1221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=1221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=1221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}