{"id":778,"date":"2026-07-30T12:21:42","date_gmt":"2026-07-30T12:21:42","guid":{"rendered":"https:\/\/matforge.org\/?p=778","raw":"https:\/\/matforge.org\/?p=778"},"modified":"2026-07-30T12:21:42","modified_gmt":"2026-07-30T12:21:42","slug":"anisotropic-mesh-adaptation-advection-dominated-flows","status":"publish","type":"post","link":"https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/","title":{"rendered":"Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n","raw":"Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n"},"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>Controls clave<\/strong><\/p>\n<ul>\n<li><strong>La adaptaci\u00f3n de la malla anisotr\u00f3pica estira los elementos a lo largo de la direcci\u00f3n del flujo<\/strong>, reduciendo los grados de libertad en 4\u00d7 (Deal.II) a 30\u00d7 (literatura) en comparaci\u00f3n con el refinamiento isotr\u00f3pico manteniendo la misma precisi\u00f3n<\/li>\n<li><strong>El tensor m\u00e9trico<\/strong>, derivado de la soluci\u00f3n Hessiano, define c\u00f3mo debe estirarse cada elemento, convirtiendo la adaptaci\u00f3n de la malla en un problema de optimizaci\u00f3n geom\u00e9trica.<\/li>\n<li><strong>Dos familias de estimadores<\/strong>: Basado en la recuperaci\u00f3n (simple, r\u00e1pido) vs orientado a objetivos (preciso para su cantidad espec\u00edfica de inter\u00e9s pero requiere resolver una ecuaci\u00f3n adjunta)<\/li>\n<li><strong>El intercambio de bordes conserva la calidad de la malla<\/strong> Cuando el estiramiento direccional crear\u00eda elementos distorsionados, om\u00edtelo y tu calidad de malla se degrada.<\/li>\n<li><strong>Flujo de trabajo de Python primero<\/strong> con Animate\/Firedrake hace que la adaptaci\u00f3n anisotr\u00f3pica sea accesible sin una experiencia profunda en C++<\/li>\n<\/ul>\n<\/blockquote>\n<hr>\n<h2>El problema al que te enfrentas<\/h2>\n<p>Ha creado una simulaci\u00f3n para un problema dominado por la advecci\u00f3n. El flujo lleva un escalar \u2014temperatura, concentraci\u00f3n, contaminante\u2014 a trav\u00e9s de un dominio. El n\u00famero de pecle es alto. \u00bfY tu malla? Es uniforme. Cada celda tiene el mismo tama\u00f1o, aunque la f\u00edsica solo se preocupa por la resoluci\u00f3n a lo largo de la direcci\u00f3n del flujo.<\/p>\n<p>Refinas todo por igual. La malla se vuelve m\u00e1s densa. Su simulaci\u00f3n se ejecuta m\u00e1s lenta. La soluci\u00f3n mejora, apenas. Y est\u00e1s atascado: la simulaci\u00f3n tarda horas o d\u00edas en ejecutarse, y no est\u00e1s seguro de si est\u00e1 convergente.<\/p>\n<p><strong>Aqu\u00ed es donde la adaptaci\u00f3n de malla anisotr\u00f3pica deja de ser opcional y se vuelve esencial.<\/strong><\/p>\n<p>En lugar de hacer que cada celda sea m\u00e1s peque\u00f1a (refinamiento isotr\u00f3pico), estiras las celdas que importan en la direcci\u00f3n del flujo y engrosa el resto. Es como hacer zoom en un mapa de carreteras solo a lo largo de la ruta que viajas, no sobre todo el paisaje. Obtienes la resoluci\u00f3n donde la necesitas y te saltas el resto.<\/p>\n<p>Esta gu\u00eda le muestra exactamente c\u00f3mo funciona la adaptaci\u00f3n de malla anisotr\u00f3pica, por qu\u00e9 reduce el costo computacional de manera tan dram\u00e1tica y c\u00f3mo implementarlo en la pr\u00e1ctica. Ver\u00e1 datos concretos de Deal.II (4 \u00d7 menos grados de libertad), aprender\u00e1 paso a paso la formulaci\u00f3n del tensor m\u00e9trico y comprender\u00e1 cu\u00e1ndo usarlo en comparaci\u00f3n con las estrategias isotr\u00f3picas.<\/p>\n<hr>\n<h2>\u00bfPor qu\u00e9 adaptaci\u00f3n de malla anisotr\u00f3pica?<\/h2>\n<h3>La naturaleza direccional de las capas de advecci\u00f3n<\/h3>\n<p>Cuando la advecci\u00f3n domina la difusi\u00f3n: n\u00fameros altos de peclet, t\u00edpicamente PE &gt;&gt; 2 \u2014 La soluci\u00f3n desarrolla gradientes n\u00edtidos alineados con la direcci\u00f3n del flujo. Piense en un frente de concentraci\u00f3n que sea empinado a trav\u00e9s del arroyo pero que quede suave a lo largo de \u00e9l. La f\u00edsica es <strong>inherentemente direccional<\/strong>.<\/p>\n<p>El refinamiento de malla isotr\u00f3pica trata en todas las direcciones por igual. Hace que las celdas sean m\u00e1s peque\u00f1as en todas las direcciones, lo que significa que est\u00e1 agregando resoluci\u00f3n donde la soluci\u00f3n ya es suave, un desperdicio de grados de libertad. La matem\u00e1tica es sencilla: el refinamiento isotr\u00f3pico en los costos 2D O(n\u00b2) y en los costos 3D o(n\u00b3) para las capas dominadas por advecci\u00f3n. La sobrecarga crece cuadr\u00e1tica o c\u00fabicamente.<\/p>\n<p>La adaptaci\u00f3n anisotr\u00f3pica respeta la direccionalidad. Los elementos se estiran a lo largo del flujo (alta relaci\u00f3n de aspecto, alineado con flujo) mientras permanecen gruesos a trav\u00e9s de \u00e9l. La misma precisi\u00f3n se logra con <strong>uno a dos \u00f3rdenes de menos grados de libertad<\/strong> en las aplicaciones publicadas.<\/p>\n<h3>Los n\u00fameros concretos<\/h3>\n<p>Quieres n\u00fameros, no solo teor\u00eda. Esto es lo que el tutorial STEP-30 de Deal.ii, un ejemplo de transporte de DG en ejecuci\u00f3n, en realidad informa:<\/p>\n<table>\n<thead>\n<tr>\n<th>Estrategia<\/th>\n<th>Ciclo 5 DOFS<\/th>\n<th>costo relativo<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Refinamiento isotr\u00f3pico<\/td>\n<td>16.076<\/td>\n<td>Base<\/td>\n<\/tr>\n<tr>\n<td>Refinamiento anisotr\u00f3pico<\/td>\n<td>4.120<\/td>\n<td><strong>4\u00d7 menos<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>La estrategia anisotr\u00f3pica logra la misma precisi\u00f3n de la soluci\u00f3n con un factor de <strong>4 menos grados de libertad<\/strong> sobre el mismo problema. Esto es directamente verificable desde la salida del tutorial.<\/p>\n<p>La literatura empuja a\u00fan m\u00e1s. Revisi\u00f3n de la d\u00e9cada de 2016 de Alauzet, la s\u00edntesis m\u00e1s citada del campo (285 citas), documenta reducciones de DOF que van desde <strong>15\u00d7 a 30\u00d7<\/strong> en aplicaciones de CFD 3D utilizando mallas anisotr\u00f3picas de alto aspecto ratios. Los n\u00fameros dependen de la complejidad del problema, pero la tendencia es consistente: el refinamiento consciente de la direcci\u00f3n supera constantemente las estrategias isotr\u00f3picas.<\/p>\n<blockquote>\n<p><strong>Related<\/strong>: Si est\u00e1 trabajando con problemas dominados por la advecci\u00f3n y a\u00fan no ha cubierto las t\u00e9cnicas de estabilizaci\u00f3n, nuestro [SUPG stabilization guide](https:\/\/matforge.org\/advection-dominated-problems-supg-stabilization\/){rel=\u00bbnofollow\u00bb target=\u00bb_blank\u00bb} Cubre el lado de discretizaci\u00f3n del mismo espacio de problemas. Las mallas anisotr\u00f3picas y el SUPG a menudo se usan juntas.<\/p>\n<\/blockquote>\n<hr>\n<h2>Lo que la mayor\u00eda de la gente se equivoca sobre el refinamiento de la malla<\/h2>\n<p>Antes de sumergirnos en la mec\u00e1nica, abordemos un concepto err\u00f3neo com\u00fan.<\/p>\n<p><strong>La mayor\u00eda de los investigadores piensan que \u00abm\u00e1s resoluci\u00f3n\u00bb significa \u00abc\u00e9lulas m\u00e1s peque\u00f1as en todas partes\u00bb.<\/strong> Esa es la mentalidad isotr\u00f3pica, y es costosa. Cuando el gradiente de soluci\u00f3n solo vive en una direcci\u00f3n (a lo largo del flujo), refinar en todas partes desperdicia recursos computacionales. Est\u00e1s resolviendo un problema direccional con una estrategia de soluci\u00f3n isotr\u00f3pica.<\/p>\n<p><strong>La correcci\u00f3n<\/strong>: la adaptaci\u00f3n de la malla debe alinearse con la f\u00edsica, no contra ella. Si el frente de concentraci\u00f3n es empinado a trav\u00e9s de la corriente pero suave a lo largo de ella, estire los elementos para que coincidan. Esa es la idea central detr\u00e1s del refinamiento anisotr\u00f3pico, y es la raz\u00f3n por la que ves esas reducciones DOF de 4\u00d7 a 30\u00d7.<\/p>\n<p>Esta no es una idea nueva: ha sido parte de la literatura de adaptaci\u00f3n de malla desde la d\u00e9cada de 1990. Lo que ha cambiado es la accesibilidad. Las herramientas nativas de Python (animados, pragm\u00e1ticas) ahora hacen que la adaptaci\u00f3n anisotr\u00f3pica sea pr\u00e1ctica para los investigadores que escriben Python, no C++.<\/p>\n<hr>\n<h2>C\u00f3mo funciona la adaptaci\u00f3n de malla anisotr\u00f3pica<\/h2>\n<p>La canalizaci\u00f3n tiene tres etapas: calcular el hessiano de la soluci\u00f3n, derivar el tensor m\u00e9trico y remesh. Vayamos a trav\u00e9s de cada paso.<\/p>\n<h3>Paso 1: Calcular el Hessiano<\/h3>\n<p>Comience con la soluci\u00f3n escalar \u03c6 (temperatura, concentraci\u00f3n, cualquiera que sea su variable). La arpillera de \u03c6 captura la curvatura de la soluci\u00f3n:<\/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, el Hessiano es una matriz sim\u00e9trica de 2 \u00d7 2. En 3D, es 3\u00d73. El hessiano te dice d\u00f3nde se curva la soluci\u00f3n m\u00e1s bruscamente, esencialmente, d\u00f3nde necesitas resoluci\u00f3n.<\/p>\n<blockquote>\n<p><strong>Nota pr\u00e1ctica<\/strong>: En la pr\u00e1ctica se prefiere la arpillera absoluta (la parte positiva de H). Cuando la soluci\u00f3n tiene un frente afilado, desea resolver la curvatura en la direcci\u00f3n <em>a trav\u00e9s de <\/em> el frente, no a lo largo de ella. El uso de la arpillera absoluta evita la ambig\u00fcedad del signo de la arpillera cruda.<\/p>\n<\/blockquote>\n<h3>Paso 2: Derivaci\u00f3n del tensor m\u00e9trico<\/h3>\n<p>El tensor m\u00e9trico m se deriva de los valores propios y vectores propios de Hessiano absoluto. Este es el paso matem\u00e1tico central.<\/p>\n<ol>\n<li><strong>eigen-decomponer<\/strong> El arpillera absoluto: h_abs = v \u00b7 \u03bb \u00b7 v\u1d40, donde \u03bb contiene valores propios y V contiene vectores propios<\/li>\n<li><strong>Construir la m\u00e9trica<\/strong>: m = v \u00b7 |\u03bb| \u00b7 V\u1d40, donde |\u03bb| es la matriz diagonal de las magnitudes de valor propio<\/li>\n<\/ol>\n<p>El tensor m\u00e9trico codifica los tama\u00f1os y orientaciones de los elementos deseados. Cada entrada diagonal en |\u03bb| Establece la resoluci\u00f3n deseada en esa direcci\u00f3n: los valores propios m\u00e1s grandes significan una resoluci\u00f3n m\u00e1s fina. Los vectores propios (columnas de V) definen la orientaci\u00f3n: los elementos deben extenderse a lo largo del vector propio asociado con el valor propio m\u00e1s grande.<\/p>\n<p><strong>En la pr\u00e1ctica<\/strong>: el tensor m\u00e9trico es una matriz sim\u00e9trica positiva-definida. Sus valores propios definen los tama\u00f1os de los elementos (la ra\u00edz cuadrada inversa da el espaciado deseado) y sus vectores propios definen la orientaci\u00f3n del elemento. La m\u00e9trica se eval\u00faa en cada nodo de malla y se utiliza durante la remalla.<\/p>\n<blockquote>\n<p><strong>Source<\/strong>: El informe t\u00e9cnico de POLIMI proporciona una derivaci\u00f3n detallada del tensor de m\u00e9tricas de los valores propios\/vectores propios de Hessiano absoluto, incluidas las f\u00f3rmulas de dimensionamiento de elementos basados en la equidistribuci\u00f3n. Ver: <a href=\"https:\/\/www.mate.polimi.it\/biblioteca\/add\/qmox\/35-2025.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Informe t\u00e9cnico de POLIMI (35-2025)<\/a><\/p>\n<\/blockquote>\n<h3>Paso 3: Remachado<\/h3>\n<p>Con el campo m\u00e9trico calculado a trav\u00e9s de la malla, sigue la reintegraci\u00f3n. El remesher usa el tensor m\u00e9trico en cada nodo para determinar el tama\u00f1o y la orientaci\u00f3n del elemento. Los paquetes est\u00e1ndar son:<\/p>\n<ul>\n<li><strong>BAMG<\/strong> (Generador de malla adaptativa de l\u00edmites) \u2014 La biblioteca cl\u00e1sica de C++<\/li>\n<li><strong>MmgTools<\/strong>: el contenedor moderno con soporte de API de Python. Vea el <a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">Tutorial de adaptaci\u00f3n de MMGTools<\/a><\/li>\n<\/ul>\n<p>Durante la reintegraci\u00f3n, el Mesher respeta la m\u00e9trica: estira los elementos a lo largo de la direcci\u00f3n principal (vector mayor de valor propio mayor), refina donde los valores propios son grandes y los toscos donde son peque\u00f1os. El resultado es una malla alineada con la estructura de la soluci\u00f3n.<\/p>\n<h3>Una nota sobre el intercambio de bordes<\/h3>\n<p>Cuando el tensor m\u00e9trico dicta un fuerte estiramiento direccional, la conectividad de malla local puede degradarse. Los elementos se vuelven muy sesgados y las ca\u00eddas de la calidad de la malla. <strong>Intercambio de borde<\/strong> soluciona esto.<\/p>\n<p>El intercambio de bordes reemplaza un borde en un elemento tetra\u00e9drico (o triangular) con un borde diferente, manteniendo una conectividad v\u00e1lida del elemento al tiempo que reduce el sesgo. MMGTools implementa cinco herramientas de minimizaci\u00f3n locales para este prop\u00f3sito, incluidos intercambios de bordes, adiciones\/supresiones de v\u00e9rtice y reubicaci\u00f3n de v\u00e9rtice, espec\u00edficamente para preservar la calidad de la malla cuando el tensor m\u00e9trico exige anisotrop\u00eda extrema.<\/p>\n<p><strong>Omita el intercambio de bordes y la calidad de su malla se degrada.<\/strong> La m\u00e9trica le indicar\u00e1 a The Meser que estire elementos, pero sin los operadores de conectividad local, esos elementos estirados se vuelven inutilizables para el solucionador. El intercambio de bordes no es opcional cuando se usa una adaptaci\u00f3n s\u00f3lida basada en m\u00e9tricas.<\/p>\n<hr>\n<h2>Estimadores de errores: basado en recuperaci\u00f3n frente a objetivos<\/h2>\n<p>Antes de que se ejecute cualquier adaptaci\u00f3n, necesita una estimaci\u00f3n de error. \u00bfD\u00f3nde est\u00e1 la soluci\u00f3n incorrecta? Dos familias de estimadores dominan la literatura.<\/p>\n<h3>Estimaci\u00f3n basada en recuperaci\u00f3n<\/h3>\n<p>Los estimadores basados en recuperaci\u00f3n (tambi\u00e9n llamados libres de residuos o tipo ZZ) calculan el error comparando la soluci\u00f3n num\u00e9rica con una soluci\u00f3n \u00abrecubierta\u00bb de mayor calidad.<\/p>\n<p><strong>C\u00f3mo funciona<\/strong>:<\/p>\n<ol>\n<li>Calcule la soluci\u00f3n num\u00e9rica en la malla actual<\/li>\n<li>Reconstruir una versi\u00f3n m\u00e1s suave de la soluci\u00f3n (recuperar gradientes, reconstruir un campo de orden superior)<\/li>\n<li>La diferencia entre los dos es el indicador de error<\/li>\n<\/ol>\n<p><strong>El estimador formaggia-perotto<\/strong> es el ejemplo can\u00f3nico. Formaggia &amp; Micheletti (2004) combin\u00f3 la recuperaci\u00f3n de Zienkiewicz-Zhu con estimaciones de interpolaci\u00f3n anisotr\u00f3pica para producir un estimador de error s\u00f3lido para los problemas de advecci\u00f3n-difusi\u00f3n-reacci\u00f3n. Es 151 citado, ampliamente utilizado y f\u00e1cil de implementar.<\/p>\n<p><strong>pros<\/strong>: computacionalmente eficiente, bien establecido, no requiere resolver ecuaciones adicionales<br \/> <strong>cons<\/strong>: la estimaci\u00f3n del error es agn\u00f3stica de la soluci\u00f3n: le dice d\u00f3nde est\u00e1 la soluci\u00f3n incorrecta, pero no c\u00f3mo ese error afecta su cantidad espec\u00edfica de inter\u00e9s<\/p>\n<p><strong>Fuente<\/strong>: Formaggia &amp; El art\u00edculo original de Micheletti \u2014 <a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/S0168927404000972\" target=\"_blank\" rel=\"nofollow noopener\">An\u00e1lisis de errores a posteriori a posteriori para problemas de advecci\u00f3n-difusi\u00f3n-reacci\u00f3n<\/a> \u2014 sigue siendo la referencia principal para el marco Formaggia-Perotto.<\/p>\n<h3>Estimaci\u00f3n orientada a objetivos (basada en conjunto)<\/h3>\n<p>La estimaci\u00f3n orientada a objetivos (tambi\u00e9n llamada base adjunta o residual de ponderaci\u00f3n dual\/DWR) va un paso m\u00e1s all\u00e1. En lugar de medir el error general, mide el error <strong>relativo a una cantidad espec\u00edfica de inter\u00e9s<\/strong>, la integral que realmente le importa.<\/p>\n<p><strong>C\u00f3mo funciona<\/strong>:<\/p>\n<ol>\n<li>Defina su \u00abcantidad de inter\u00e9s\u00bb (por ejemplo, flujo total en el flujo de salida, tensi\u00f3n m\u00e1xima, temperatura integrada)<\/li>\n<li>Resuelva la ecuaci\u00f3n adjunta: una ecuaci\u00f3n de sensibilidad que le dice c\u00f3mo el error de soluci\u00f3n afecta su cantidad de inter\u00e9s<\/li>\n<li>El producto del error primario y la sensibilidad adjunta proporciona la estimaci\u00f3n de error orientado a objetivos<\/li>\n<\/ol>\n<p>El documento de Wallwork 2019 demuestra esto claramente en el ecosistema Firedrake. La soluci\u00f3n adjunta proporciona un <strong>mapa de sensibilidad<\/strong>: las regiones donde m\u00e1s importan los errores (altos valores adjuntos) se refinan, las regiones donde los errores no afectan su cantidad de inter\u00e9s se engrosan.<\/p>\n<p><strong>Pros<\/strong>: Precisi\u00f3n espec\u00edfica de la optimizaci\u00f3n: la adaptaci\u00f3n enfoca los recursos exactamente donde impactan su objetivo<br \/> <strong>cons<\/strong>: requiere resolver una ecuaci\u00f3n adjunta adicional; computacionalmente m\u00e1s caro; M\u00e1s complejo de implementar<\/p>\n<p><strong>Source<\/strong>: Wallwork 2019 \u2014 <a href=\"https:\/\/eartharxiv.org\/repository\/object\/504\/download\/1091\/\" target=\"_blank\" rel=\"nofollow noopener\">La estimaci\u00f3n de errores orientado a objetivos y la adaptaci\u00f3n de malla para Firedrake<\/a> proporciona los detalles de la implementaci\u00f3n de Firedrake y la gu\u00eda pr\u00e1ctica.<\/p>\n<h3>Cu\u00e1ndo elegir cu\u00e1l<\/h3>\n<table>\n<thead>\n<tr>\n<th>Situaci\u00f3n<\/th>\n<th>Estimador recomendado<\/th>\n<th>Por qu\u00e9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Mejora de la precisi\u00f3n general<\/td>\n<td>Basado en recuperaci\u00f3n (Formaggia-perotto, ZZ)<\/td>\n<td>Sencillo, r\u00e1pido, bien establecido<\/td>\n<\/tr>\n<tr>\n<td>Su objetivo es una integral o valor de campo espec\u00edfico<\/td>\n<td>Orientado a objetivos (adjunta\/DWR)<\/td>\n<td>Se adapta precisamente donde importa<\/td>\n<\/tr>\n<tr>\n<td>Presupuesto de c\u00e1lculo limitado<\/td>\n<td>basado en la recuperaci\u00f3n<\/td>\n<td>Una soluci\u00f3n, una adaptaci\u00f3n<\/td>\n<\/tr>\n<tr>\n<td>Simulaci\u00f3n de alto riesgo donde cada DOF cuenta<\/td>\n<td>orientado a objetivos<\/td>\n<td>Evita desperdiciar la resoluci\u00f3n en regiones irrelevantes<\/td>\n<\/tr>\n<tr>\n<td>Cantidad de inter\u00e9s desconocida<\/td>\n<td>basado en la recuperaci\u00f3n<\/td>\n<td>No se necesita adjunto, amplia cobertura de error<\/td>\n<\/tr>\n<tr>\n<td>Problema de optimizaci\u00f3n o dise\u00f1o<\/td>\n<td>orientado a objetivos<\/td>\n<td>Adaptado a su funci\u00f3n objetivo<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote>\n<p><strong>Nuestra recomendaci\u00f3n<\/strong>: Comience con la estimaci\u00f3n basada en la recuperaci\u00f3n. Es m\u00e1s simple, bien documentado y funciona bien para la mayor\u00eda de los casos. Pase a la adaptaci\u00f3n orientada a objetivos cuando tenga una cantidad espec\u00edfica de inter\u00e9s y pueda justificar la sobrecarga de resoluci\u00f3n adjunta. El ejemplo de Firedrake de Wallwork 2019 es una excelente referencia si elige el camino orientado a objetivos.<\/p>\n<\/blockquote>\n<hr>\n<h2>Patrones de implementaci\u00f3n<\/h2>\n<p>La teor\u00eda es clara. La implementaci\u00f3n es donde el caucho se encuentra con el camino. Cubramos los patrones principales en diferentes ecosistemas.<\/p>\n<h3>Intercambio de bordes y BAMG\/MMGTools<\/h3>\n<p>BAMG (Boundary Adaptive Mesh Generator) es la biblioteca C++ original para la adaptaci\u00f3n anisotr\u00f3pica basada en m\u00e9tricas. MMGTools lo moderniz\u00f3 con una API de Python y una herramienta de l\u00ednea de comandos.<\/p>\n<p><strong>El flujo de trabajo de MMGTools<\/strong>:<\/p>\n<ol>\n<li>Calcule el campo m\u00e9trico (hessiano \u2192 tensor) en su malla<\/li>\n<li>Exporte la m\u00e9trica como un archivo legible por MMG<\/li>\n<li>Ejecutar <code>mmg2d -h1 mesh.in<\/code> (o <code>mmg3d<\/code> para 3D) con <code>-hs<\/code> Indicadores para dimensionamiento anisotr\u00f3pico<\/li>\n<li>La herramienta lee la m\u00e9trica, realiza el intercambio de bordes y genera una malla adaptada<\/li>\n<\/ol>\n<p>El tutorial de MMGTools en <a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">mmgtools.org\/tutorials<\/a> Cubre el uso de la l\u00ednea de comandos y la API de Python. Es la gu\u00eda m\u00e1s pr\u00e1ctica para pasar del tensor m\u00e9trico a la malla adaptada.<\/p>\n<h3>Animaci\u00f3n \/ Drag\u00f3n de fuego<\/h3>\n<p>Animate es una canalizaci\u00f3n completa de Python-native para la adaptaci\u00f3n anisotr\u00f3pica basada en m\u00e9tricas. Est\u00e1 construido sobre Firedrake y se integra con Pragmatic (el backend del kit de herramientas de malla adaptable anisotr\u00f3pico paralelo).<\/p>\n<p><strong>El flujo de trabajo animado<\/strong>:<\/p>\n<ol>\n<li>Crear una malla inicial de Firedrake<\/li>\n<li>Resuelve tu PDE para obtener el campo escalar<\/li>\n<li>Calcule el tensor m\u00e9trico a partir de la soluci\u00f3n Hessiano<\/li>\n<li>Definir un campo m\u00e9trico en la malla<\/li>\n<li>Transformaci\u00f3n de la malla de Animate: La malla se adapta conservando el campo<\/li>\n<\/ol>\n<p>Animate proporciona dos m\u00f3dulos:<\/p>\n<ul>\n<li><strong>Movimiento<\/strong>: Estrategias de movimiento de malla (remapeo suave de campos en mallas adaptadas)<\/li>\n<li><strong>Goalie<\/strong>: adaptaci\u00f3n orientada a objetivos con solucionadores adjuntos<\/li>\n<\/ul>\n<blockquote>\n<p><strong>Source<\/strong>: animar docs \u2014 <a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">mesh-adaptation.gitHub.io<\/a> \u2014 y pragmatic \u2014 <a href=\"https:\/\/github.com\/meshadaptation\/pragmatic\" target=\"_blank\" rel=\"nofollow noopener\">meshaDaptation\/pragmatic on github<\/a> \u2014 Proporcione el total Pipeline nativo de Python. Esta es la mejor referencia para los investigadores basados en Python.<\/p>\n<\/blockquote>\n<h3>Comparaci\u00f3n de OFERTA.II<\/h3>\n<p>Deal.ii maneja el refinamiento anisotr\u00f3pico de forma nativa a trav\u00e9s de sus banderas <code>RefinementCase::cut_x\/y\/z<\/code>. El tutorial STEP-30 es el ejemplo can\u00f3nico:<\/p>\n<ul>\n<li>El tutorial resuelve la ecuaci\u00f3n de transporte lineal usando DG<\/li>\n<li>El refinamiento anisotr\u00f3pico utiliza <code>RefinementCase::cut_x<\/code> (y y\/z en 3D) para refinar solo en la direcci\u00f3n del flujo<\/li>\n<li>El algoritmo del indicador de salto identifica gradientes alineados con flujo y divide los elementos en consecuencia<\/li>\n<li>Salida: 4.120 DOFS (anisotr\u00f3pico) vs 16.076 (isotr\u00f3pico) en el ciclo 5<\/li>\n<\/ul>\n<p>El enfoque de Deal.ii es <strong>m\u00e1s \u00e1spero, no m\u00e1s fino<\/strong>: no se remalla, refina los elementos existentes en direcciones espec\u00edficas. Esto es eficiente para mallas estructuradas o semiestructuradas, pero menos flexible que la red de malla basada en m\u00e9tricas para casos no estructurados.<\/p>\n<blockquote>\n<p><strong>Related<\/strong>: Nuestro [discontinuous Galerkin tutorial](https:\/\/matforge.org\/discontinuo-galerkin-method-tutorial\/){rel=\u00bbnofollow\u00bb target=\u00bb_blank\u00bb} cubre la discretizaci\u00f3n de DG, que com\u00fanmente se empareja con refinamiento anisotr\u00f3pico en problemas dominados por la advecci\u00f3n.<\/p>\n<\/blockquote>\n<hr>\n<h2>Cu\u00e1ndo usar anisotr\u00f3pico vs isotr\u00f3pico<\/h2>\n<p>No todos los problemas se benefician de la adaptaci\u00f3n anisotr\u00f3pica. Aqu\u00ed est\u00e1 el marco de decisi\u00f3n:<\/p>\n<table>\n<thead>\n<tr>\n<th>Situaci\u00f3n<\/th>\n<th>estrategia recomendada<\/th>\n<th>Por qu\u00e9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Direcci\u00f3n de flujo conocida y consistente<\/td>\n<td><strong>Anisotr\u00f3pico<\/strong><\/td>\n<td>Reducci\u00f3n 4\u00d7\u201330\u00d7 DOF, alineada con la f\u00edsica<\/td>\n<\/tr>\n<tr>\n<td>La direcci\u00f3n del flujo var\u00eda espacialmente<\/td>\n<td><strong>Mixto<\/strong> (anisotr\u00f3pico en regiones de flujo, isotr\u00f3pico en otros lugares)<\/td>\n<td>Captura la direccionalidad donde importa<\/td>\n<\/tr>\n<tr>\n<td>Direcci\u00f3n de flujo desconocida<\/td>\n<td><strong>isotr\u00f3pico<\/strong><\/td>\n<td>No adivine; Adaptarse de forma conservadora<\/td>\n<\/tr>\n<tr>\n<td>Soluci\u00f3n suave, sin degradados afilados<\/td>\n<td><strong>isotr\u00f3pico<\/strong><\/td>\n<td>Sin estructura direccional que explotar<\/td>\n<\/tr>\n<tr>\n<td>Simulaci\u00f3n 3D, presupuesto ajustado<\/td>\n<td><strong>Anisotr\u00f3pico<\/strong><\/td>\n<td>O(n\u00b3) isotr\u00f3pico es prohibitivo; escalas anisotr\u00f3picas mejor<\/td>\n<\/tr>\n<tr>\n<td>Validaci\u00f3n de la investigaci\u00f3n, comparaci\u00f3n de referencia<\/td>\n<td><strong>Ejecutar ambos<\/strong><\/td>\n<td>documentar la diferencia; Justifica tu elecci\u00f3n<\/td>\n<\/tr>\n<tr>\n<td>La calidad de la malla ya es mala<\/td>\n<td><strong>Primero isotr\u00f3pico<\/strong> (luego anisotr\u00f3pico)<\/td>\n<td>Fijar la calidad antes de la adaptaci\u00f3n<\/td>\n<\/tr>\n<tr>\n<td>Adaptaci\u00f3n orientada a objetivos disponible<\/td>\n<td><strong>Anisotr\u00f3pico orientado a objetivos<\/strong><\/td>\n<td>adaptado a su cantidad de inter\u00e9s<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote>\n<p><strong>Nuestra recomendaci\u00f3n<\/strong>: Cuando conoces la direcci\u00f3n del flujo y la soluci\u00f3n tiene gradientes n\u00edtidos alineados con ella, <strong>La adaptaci\u00f3n anisotr\u00f3pica deber\u00eda ser tu estrategia predeterminada<\/strong>. El refinamiento isotr\u00f3pico es la alternativa: \u00faselo cuando la direcci\u00f3n del flujo var\u00eda, cuando no puede calcular la m\u00e9trica de manera confiable o al validar los resultados de la l\u00ednea base.<\/p>\n<\/blockquote>\n<hr>\n<h2>Flujo de trabajo pr\u00e1ctico: de cero a malla adaptada<\/h2>\n<p>Aqu\u00ed hay un flujo de trabajo concreto que puede seguir. Usaremos la canalizaci\u00f3n Animate\/Firedrake como el ejemplo nativo de Python, pero los pasos se aplican en todos los ecosistemas.<\/p>\n<h3>Paso 1: generar una malla inicial<\/h3>\n<p>Comience con una malla isotr\u00f3pica gruesa. No necesitas refinamiento en esta etapa; este es solo tu punto de partida.<\/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>Paso 2: Resuelve el PDE<\/h3>\n<p>Resuelva su problema dominado por advecci\u00f3n en la malla inicial.<\/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>Paso 3: Calcule el tensor m\u00e9trico<\/h3>\n<p>Extraiga el Hessian de la soluci\u00f3n y convi\u00e9rtalo en un campo m\u00e9trico.<\/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>Paso 4: Definir el campo de m\u00e9trica<\/h3>\n<p>Asigne el tensor m\u00e9trico a los nodos de malla.<\/p>\n<pre><code class=\"language-python\">from animate import MetricField\n\nmetric_field = MetricField(mesh, metric_tensor)\n<\/code><\/pre>\n<h3>Paso 5: adaptar la malla<\/h3>\n<p>Llame a la rutina de adaptaci\u00f3n. Animate maneja la reintegraci\u00f3n, el intercambio de bordes y la interpolaci\u00f3n de campo.<\/p>\n<pre><code class=\"language-python\">from animate import Movement\n\nmesh = Movement.apply(mesh, metric_field)\n<\/code><\/pre>\n<p>La malla ahora est\u00e1 adaptada: los elementos se estiran a lo largo de la direcci\u00f3n del flujo, se refinan donde la soluci\u00f3n tiene gradientes afilados y se engrosan donde la soluci\u00f3n es lisa. El campo de soluci\u00f3n se interpola en la nueva malla.<\/p>\n<h3>Paso 6: Resolver (opcional)<\/h3>\n<p>Con la malla adaptada, vuelva a ejecutar su simulaci\u00f3n. La soluci\u00f3n deber\u00eda converger m\u00e1s r\u00e1pido (menos DOF) y producir la misma precisi\u00f3n que la l\u00ednea base isotr\u00f3pica.<\/p>\n<h3>Paso 7: Iterar<\/h3>\n<p>La adaptaci\u00f3n es t\u00edpicamente iterativa. Resuelves, adaptas, resuelves y repites hasta que la malla converge. La canalizaci\u00f3n de Animate est\u00e1 dise\u00f1ada para m\u00faltiples ciclos de adaptaci\u00f3n.<\/p>\n<blockquote>\n<p><strong>Source<\/strong>: animar documentos \u2014 <a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">mesh-adaptation.github.io<\/a> \u2014 Cubre toda la tuber\u00eda desde la malla inicial hasta la malla adaptada. El flujo de trabajo anterior sigue su secuencia recomendada.<\/p>\n<\/blockquote>\n<hr>\n<h2>\u00bfQu\u00e9 pasa con la calidad de la malla?<\/h2>\n<p>Aqu\u00ed hay un punto que vale la pena enfatizar: <strong>La calidad de la malla determina si su malla adaptada incluso funciona<\/strong>.<\/p>\n<p>Si sigue el <a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\" target=\"_blank\" rel=\"nofollow noopener\">gu\u00eda de calidad de malla<\/a> las seis m\u00e9tricas de calidad (calidad ortogonal, asimetr\u00eda, relaci\u00f3n de aspecto, relaci\u00f3n jacobiana, relaci\u00f3n de expansi\u00f3n volum\u00e9trica y l\u00edmites de \u00e1ngulo). El refinamiento anisotr\u00f3pico cambia dr\u00e1sticamente las relaciones de aspecto: los elementos se estiran. Eso es intencional. Pero las m\u00e9tricas <strong>otras<\/strong> deben permanecer dentro de rangos seguros.<\/p>\n<p><strong>La regla clave<\/strong>: el refinamiento anisotr\u00f3pico no debe degradar el sesgo, la relaci\u00f3n jacobiana o los \u00e1ngulos m\u00ednimos m\u00e1s all\u00e1 de los umbrales aceptables. El intercambio de bordes existe exactamente por esta raz\u00f3n.<\/p>\n<hr>\n<h2>Errores comunes y c\u00f3mo evitarlos<\/h2>\n<h3>Error #1: Intercambio de bordes omitiendo<\/h3>\n<p><strong>Lo que sucede<\/strong>: el tensor m\u00e9trico estira los elementos a lo largo del flujo. Sin intercambio de bordes, esos elementos estirados se vuelven muy sesgados. Su informe de calidad de malla muestra advertencias rojas y su solucionador lucha o diverge.<\/p>\n<p><strong>C\u00f3mo evitarlo<\/strong>: Siempre incluya el intercambio de bordes en su canalizaci\u00f3n de adaptaci\u00f3n. MMGTools implementa cinco herramientas de minimizaci\u00f3n locales espec\u00edficamente para esto. En Deal.ii, el enfoque <code>RefinementCase::cut_x\/y\/z<\/code> evita el problema al refinar los elementos existentes en lugar de volver a malla.<\/p>\n<h3>Error #2: Uso de refinamiento isotr\u00f3pico para problemas direccionales<\/h3>\n<p><strong>Lo que sucede<\/strong>: Refinas en todas partes por igual. Sus DOF crecen como O(n\u00b2) en 2D u O(N\u00b3) en 3D. La simulaci\u00f3n dura m\u00e1s tiempo y la mejora de la precisi\u00f3n es marginal. Desperdicias recursos computacionales en regiones donde la soluci\u00f3n ya es fluida.<\/p>\n<p><strong>C\u00f3mo evitarlo<\/strong>: Ejecute primero un ciclo de adaptaci\u00f3n anisotr\u00f3pico. Compare el recuento de DOF. Si la malla anisotr\u00f3pica logra la misma precisi\u00f3n con menos DOF (y casi siempre lo hace para los problemas dominados por advecci\u00f3n), \u00faselo.<\/p>\n<h3>Error #3: Confusos estimadores basados en recuperaci\u00f3n y orientados a objetivos<\/h3>\n<p><strong>Lo que sucede<\/strong>: utiliza un estimador basado en la recuperaci\u00f3n pero espera una precisi\u00f3n orientada a objetivos. La adaptaci\u00f3n mejora la precisi\u00f3n de la soluci\u00f3n, pero su cantidad espec\u00edfica de inter\u00e9s no mejora como se esperaba. Est\u00e1s confundido.<\/p>\n<p><strong>C\u00f3mo evitarlo<\/strong>: Relaciona el estimador con tu objetivo. Si desea una mejora de la precisi\u00f3n general, use la recuperaci\u00f3n basada en (Formaggia-Perotto, ZZ). Si desea optimizar un valor de campo o integral espec\u00edfico, utilice orientado a objetivos (adjoint\/DWR). Sirven diferentes prop\u00f3sitos.<\/p>\n<h3>Error #4: Suponiendo que la adaptaci\u00f3n sea una operaci\u00f3n de un solo tiro<\/h3>\n<p><strong>Qu\u00e9 sucede<\/strong>: te adaptas una vez, resuelves una vez y te detienes. La malla es \u00absuficientemente buena\u00bb, pero podr\u00eda obtener una mejor precisi\u00f3n con otro ciclo. La soluci\u00f3n no ha convergido completamente en la malla adaptada.<\/p>\n<p><strong>C\u00f3mo evitarlo<\/strong>: Ejecute m\u00faltiples ciclos de adaptaci\u00f3n. Despu\u00e9s de cada ciclo, resuelve, calcula la nueva m\u00e9trica y adaptate de nuevo. Detener cuando los cambios de malla son insignificantes entre ciclos (convergencia de malla).<\/p>\n<h3>Error #5: Uso de adaptaci\u00f3n anisotr\u00f3pica en soluciones suaves<\/h3>\n<p><strong>Qu\u00e9 sucede<\/strong>: La soluci\u00f3n es fluida en todas partes. Calcula el tensor m\u00e9trico. Todos los valores propios son peque\u00f1os. La adaptaci\u00f3n no cambia nada significativo. has perdido el tiempo.<\/p>\n<p><strong>C\u00f3mo evitarlo<\/strong>: primero verifique la estructura de la soluci\u00f3n. Si los degradados son peque\u00f1os y suaves en todas partes, el refinamiento isotr\u00f3pico o incluso su malla inicial es suficiente. La adaptaci\u00f3n anisotr\u00f3pica solo vale la pena cuando hay una estructura direccional que explotar.<\/p>\n<hr>\n<h2>Una comparaci\u00f3n r\u00e1pida del DOF<\/h2>\n<p>Volvamos a los n\u00fameros. Aqu\u00ed hay un resumen visual de los datos del paso 30 de Deal.II:<\/p>\n<div style=\"text-align: center; margin: 2rem 0;\">\n<!-- Isotropic bar --><\/p>\n<p>16.076 DOFS<br \/> Isotr\u00f3pico:<br \/> <!-- Barra anisotr\u00f3pica --><\/p>\n<p>4,120 DOFS<br \/> Anisotr\u00f3pico:<br \/> <!-- Anotaci\u00f3n --><br \/> 4\u00d7 Menos grados de libertad para la misma precisi\u00f3n<\/p>\n<\/div>\n<p>El enfoque isotr\u00f3pico utiliza casi <strong>cuatro veces m\u00e1s grados de libertad<\/strong>. En 3D, esos n\u00fameros se combinan dr\u00e1sticamente: la literatura informa de 15 \u00d7 a 30 \u00d7 diferencias para las capas dominadas por advecci\u00f3n. El costo del refinamiento isotr\u00f3pico es prohibitivo para las simulaciones a gran escala.<\/p>\n<hr>\n<h2>Adaptaci\u00f3n orientada a objetivos: la frontera avanzada<\/h2>\n<p>Si la estimaci\u00f3n basada en la recuperaci\u00f3n es el est\u00e1ndar, la adaptaci\u00f3n orientada a objetivos es la frontera. Hace una pregunta m\u00e1s espec\u00edfica: \u00ab\u00bfD\u00f3nde afecta el error de soluci\u00f3n a la cantidad que realmente me importa?\u00bb<\/p>\n<p>El documento Firedrake de Wallwork 2019 demuestra el flujo de trabajo:<\/p>\n<ol>\n<li><strong>Definir su cantidad de inter\u00e9s<\/strong> \u2014 por ejemplo, flujo total a trav\u00e9s de un l\u00edmite de salida, concentraci\u00f3n m\u00e1xima en un punto<\/li>\n<li><strong>Resolver la ecuaci\u00f3n adjunta<\/strong>: la ecuaci\u00f3n de sensibilidad que te dice c\u00f3mo se propagan los errores a tu cantidad de inter\u00e9s<\/li>\n<li><strong>Compute el residuo de doble ponderaci\u00f3n<\/strong> \u2014 El producto de error primario y sensibilidad adjunta proporciona la estimaci\u00f3n de error orientado a la meta<\/li>\n<li><strong>Adaptar<\/strong> \u2014 Refinar donde la sensibilidad adjunta y el error primario son grandes<\/li>\n<\/ol>\n<p>El resultado es <strong>adaptaci\u00f3n espec\u00edfica de optimizaci\u00f3n<\/strong>. Las regiones que no afectan su cantidad de inter\u00e9s se engrosan. regiones que se refinan agresivamente. La compensaci\u00f3n: necesita resolver la ecuaci\u00f3n adjunta (una soluci\u00f3n adicional) y la implementaci\u00f3n es m\u00e1s compleja.<\/p>\n<blockquote>\n<p><strong>Cu\u00e1ndo usarlo<\/strong>: cuando su simulaci\u00f3n tiene una m\u00e9trica objetivo clara: flujo total, producci\u00f3n integrada, presi\u00f3n m\u00e1xima. Cuando cada grado de libertad cuenta, la adaptaci\u00f3n orientada a objetivos vale la pena.<\/p>\n<\/blockquote>\n<hr>\n<h2>Antes de comenzar: una lista de verificaci\u00f3n<\/h2>\n<blockquote>\n<p><strong>Nuestra recomendaci\u00f3n<\/strong>: Al resolver los problemas dominados por la advecci\u00f3n, la adaptaci\u00f3n anisotr\u00f3pica debe ser su estrategia predeterminada cuando se conoce la direcci\u00f3n del flujo. El refinamiento isotr\u00f3pico debe ser la alternativa cuando la direcci\u00f3n del flujo var\u00eda espacialmente o es desconocida.<\/p>\n<\/blockquote>\n<p>Antes de ejecutar la adaptaci\u00f3n anisotr\u00f3pica, verifique:<\/p>\n<ul>\n<li>[ ] <strong>La direcci\u00f3n del flujo es conocida o dominante<\/strong> \u2014 el tensor m\u00e9trico ser\u00e1 direccional; El flujo isotr\u00f3pico requiere mallas isotr\u00f3picas<\/li>\n<li>[ ] <strong>N\u00famero alto de peclet confirmado<\/strong> (PE &gt;&gt; 2) \u2014 Si domina la difusi\u00f3n, el refinamiento isotr\u00f3pico es suficiente<\/li>\n<li>[ ] <strong>La calidad de la malla es aceptable<\/strong> \u2014 Arregle el sesgo, la relaci\u00f3n jacobiana y los l\u00edmites del \u00e1ngulo antes de la adaptaci\u00f3n<\/li>\n<li>[ ] <strong>Se incluye el intercambio de bordes<\/strong> \u2014 El estiramiento direccional degrada la conectividad sin ella<\/li>\n<li>[ ] <strong>estimador elegido<\/strong> \u2014 Basado en recuperaci\u00f3n para la precisi\u00f3n general, orientado a objetivos para cantidades espec\u00edficas de inter\u00e9s<\/li>\n<li>[ ] <strong>Ciclos de adaptaci\u00f3n planeados<\/strong> \u2014 Un ciclo rara vez es suficiente; iterar hasta que la convergencia de malla<\/li>\n<\/ul>\n<hr>\n<h2>Resumen<\/h2>\n<p>La adaptaci\u00f3n de la malla anisotr\u00f3pica es una de las t\u00e9cnicas m\u00e1s efectivas para los problemas dominados por la advecci\u00f3n. En lugar de refinar en todas partes por igual (isotr\u00f3pico), estira los elementos a lo largo de la direcci\u00f3n del flujo y se engrosa donde la soluci\u00f3n es suave. La matem\u00e1tica es sencilla: calcule el hessiano de la soluci\u00f3n, derive el tensor m\u00e9trico de sus valores propios y vectores propios, y remesh respetando la m\u00e9trica.<\/p>\n<p>Los n\u00fameros hablan por s\u00ed mismos. El tutorial STEP-30 de Deal.II muestra <strong>4120 DOFS (anisotr\u00f3pico) frente a 16,076 DOFS (isotr\u00f3pico)<\/strong> para obtener la misma precisi\u00f3n: una reducci\u00f3n de 4 \u00d7. Los informes de la literatura empujan a\u00fan m\u00e1s alto: 15 \u00d7 a 30 \u00d7 menos grados de libertad en aplicaciones de CFD 3D.<\/p>\n<p>Dos familias de estimadores sirven a diferentes prop\u00f3sitos. Los estimadores basados en la recuperaci\u00f3n (Formaggia-Perotto, Zienkiewicz-Zhu) son r\u00e1pidos y bien establecidos. Los estimadores orientados a objetivos (adjoint\/DWR) son precisos para su cantidad espec\u00edfica de inter\u00e9s, pero requieren resolver una ecuaci\u00f3n adjunta adicional. <strong>Intercambio de bordes<\/strong> Conserva la calidad de la malla cuando el estiramiento direccional degradar\u00eda la conectividad.<\/p>\n<p>El ecosistema de Python (animado\/firedrake, pragm\u00e1tico) hace que la adaptaci\u00f3n anisotr\u00f3pica sea accesible para los investigadores que escriben Python. Ya no necesita una experiencia profunda de C++ para utilizar la adaptaci\u00f3n basada en m\u00e9tricas.<\/p>\n<hr>\n<h2>Pr\u00f3ximos pasos<\/h2>\n<ol>\n<li><strong>Compruebe el n\u00famero de peclet de su problema<\/strong> \u2014 si PE &gt;&gt; 2, la adaptaci\u00f3n anisotr\u00f3pica probablemente sea beneficiosa<\/li>\n<li><strong>Ejecutar Deal.II Paso 30<\/strong> \u2014 Siga el tutorial y verifique la reducci\u00f3n de DOF usted mismo (4\u00d7 en la ecuaci\u00f3n de transporte lineal)<\/li>\n<li><strong>Pruebe Animate\/Firedrake<\/strong> \u2014 Comience con la canalizaci\u00f3n b\u00e1sica: Mesh inicial \u2192 Campo m\u00e9trico \u2192 Adaptaci\u00f3n<\/li>\n<li><strong>Comparar isotr\u00f3pico vs anisotr\u00f3pico<\/strong> \u2014 Documente la diferencia de DOF y la mejora de la precisi\u00f3n<\/li>\n<li><strong>Considere la adaptaci\u00f3n orientada a objetivos<\/strong> \u2014 Si tiene una cantidad espec\u00edfica de inter\u00e9s, resuelva el adjunto y adapte en funci\u00f3n de su mapa de sensibilidad.<\/li>\n<\/ol>\n<hr>\n<h2>Gu\u00edas relacionadas<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/advection-dominated-problems-supg-stabilization\/\" target=\"_blank\" rel=\"nofollow noopener\">Problemas dominados por la advecci\u00f3n: esquemas contra el viento y estabilizaci\u00f3n de SUPG<\/a> \u2014 T\u00e9cnicas de discretizaci\u00f3n para la misma clase de problema<\/li>\n<li><a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\" target=\"_blank\" rel=\"nofollow noopener\">Estudios de calidad y convergencia de malla: una gu\u00eda pr\u00e1ctica<\/a> \u2014 M\u00e9tricas de calidad de malla y verificaci\u00f3n de refinamiento<\/li>\n<li><a href=\"https:\/\/matforge.org\/discontinuous-galerkin-method-tutorial\/\" target=\"_blank\" rel=\"nofollow noopener\">Tutorial discontinuo del m\u00e9todo Galerkin<\/a> \u2014 DG se combina com\u00fanmente con el refinamiento anisotr\u00f3pico para los flujos dominados por advecci\u00f3n<\/li>\n<\/ul>\n<hr>\n<h2>referencias<\/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). An\u00e1lisis de error a posteriori anisotr\u00f3pico para problemas de advecci\u00f3n-difusi\u00f3n-reacci\u00f3n. computadoras y amp; estructuras.<\/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). Una d\u00e9cada de progreso en la adaptaci\u00f3n de la malla anisotr\u00f3pica para la din\u00e1mica de fluidos computacional. computadoras y amp; estructuras.<\/a><\/li>\n<li><a href=\"https:\/\/eartharxiv.org\/repository\/object\/504\/download\/1091\/\" target=\"_blank\" rel=\"nofollow noopener\">Muralla, A. (2019). Estimaci\u00f3n de errores orientado a objetivos y adaptaci\u00f3n de malla para 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 Paso-30 Tutorial.<\/a><\/li>\n<li><a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">Documentaci\u00f3n de animaci\u00f3n\/Firedrake.<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/meshadaptation\/pragmatic\" target=\"_blank\" rel=\"nofollow noopener\">pragm\u00e1tico (backend de adaptaci\u00f3n de malla).<\/a><\/li>\n<li><a href=\"https:\/\/www.mate.polimi.it\/biblioteca\/add\/qmox\/35-2025.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Informe T\u00e9cnico Polimi (35-2025). Estimadores de errores basados en recuperaci\u00f3n anisotr\u00f3pica y adaptaci\u00f3n de malla.<\/a><\/li>\n<li><a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">Tutorial de adaptaci\u00f3n de MMGTools.<\/a><\/li>\n<\/ul>\n","protected":false,"raw":"<blockquote><p><strong>Controls clave<\/strong><\/p>\n<ul>\n<li><strong>La adaptaci\u00f3n de la malla anisotr\u00f3pica estira los elementos a lo largo de la direcci\u00f3n del flujo<\/strong>, reduciendo los grados de libertad en 4\u00d7 (Deal.II) a 30\u00d7 (literatura) en comparaci\u00f3n con el refinamiento isotr\u00f3pico manteniendo la misma precisi\u00f3n<\/li>\n<li><strong>El tensor m\u00e9trico<\/strong>, derivado de la soluci\u00f3n Hessiano, define c\u00f3mo debe estirarse cada elemento, convirtiendo la adaptaci\u00f3n de la malla en un problema de optimizaci\u00f3n geom\u00e9trica.<\/li>\n<li><strong>Dos familias de estimadores<\/strong>: Basado en la recuperaci\u00f3n (simple, r\u00e1pido) vs orientado a objetivos (preciso para su cantidad espec\u00edfica de inter\u00e9s pero requiere resolver una ecuaci\u00f3n adjunta)<\/li>\n<li><strong>El intercambio de bordes conserva la calidad de la malla<\/strong> Cuando el estiramiento direccional crear\u00eda elementos distorsionados, om\u00edtelo y tu calidad de malla se degrada.<\/li>\n<li><strong>Flujo de trabajo de Python primero<\/strong> con Animate\/Firedrake hace que la adaptaci\u00f3n anisotr\u00f3pica sea accesible sin una experiencia profunda en C++<\/li>\n<\/ul>\n<\/blockquote>\n<hr>\n<h2>El problema al que te enfrentas<\/h2>\n<p>Ha creado una simulaci\u00f3n para un problema dominado por la advecci\u00f3n. El flujo lleva un escalar \u2014temperatura, concentraci\u00f3n, contaminante\u2014 a trav\u00e9s de un dominio. El n\u00famero de pecle es alto. \u00bfY tu malla? Es uniforme. Cada celda tiene el mismo tama\u00f1o, aunque la f\u00edsica solo se preocupa por la resoluci\u00f3n a lo largo de la direcci\u00f3n del flujo.<\/p>\n<p>Refinas todo por igual. La malla se vuelve m\u00e1s densa. Su simulaci\u00f3n se ejecuta m\u00e1s lenta. La soluci\u00f3n mejora, apenas. Y est\u00e1s atascado: la simulaci\u00f3n tarda horas o d\u00edas en ejecutarse, y no est\u00e1s seguro de si est\u00e1 convergente.<\/p>\n<p><strong>Aqu\u00ed es donde la adaptaci\u00f3n de malla anisotr\u00f3pica deja de ser opcional y se vuelve esencial.<\/strong><\/p>\n<p>En lugar de hacer que cada celda sea m\u00e1s peque\u00f1a (refinamiento isotr\u00f3pico), estiras las celdas que importan en la direcci\u00f3n del flujo y engrosa el resto. Es como hacer zoom en un mapa de carreteras solo a lo largo de la ruta que viajas, no sobre todo el paisaje. Obtienes la resoluci\u00f3n donde la necesitas y te saltas el resto.<\/p>\n<p>Esta gu\u00eda le muestra exactamente c\u00f3mo funciona la adaptaci\u00f3n de malla anisotr\u00f3pica, por qu\u00e9 reduce el costo computacional de manera tan dram\u00e1tica y c\u00f3mo implementarlo en la pr\u00e1ctica. Ver\u00e1 datos concretos de Deal.II (4 \u00d7 menos grados de libertad), aprender\u00e1 paso a paso la formulaci\u00f3n del tensor m\u00e9trico y comprender\u00e1 cu\u00e1ndo usarlo en comparaci\u00f3n con las estrategias isotr\u00f3picas.<\/p>\n<hr>\n<h2>\u00bfPor qu\u00e9 adaptaci\u00f3n de malla anisotr\u00f3pica?<\/h2>\n<h3>La naturaleza direccional de las capas de advecci\u00f3n<\/h3>\n<p>Cuando la advecci\u00f3n domina la difusi\u00f3n: n\u00fameros altos de peclet, t\u00edpicamente PE &gt;&gt; 2 \u2014 La soluci\u00f3n desarrolla gradientes n\u00edtidos alineados con la direcci\u00f3n del flujo. Piense en un frente de concentraci\u00f3n que sea empinado a trav\u00e9s del arroyo pero que quede suave a lo largo de \u00e9l. La f\u00edsica es <strong>inherentemente direccional<\/strong>.<\/p>\n<p>El refinamiento de malla isotr\u00f3pica trata en todas las direcciones por igual. Hace que las celdas sean m\u00e1s peque\u00f1as en todas las direcciones, lo que significa que est\u00e1 agregando resoluci\u00f3n donde la soluci\u00f3n ya es suave, un desperdicio de grados de libertad. La matem\u00e1tica es sencilla: el refinamiento isotr\u00f3pico en los costos 2D O(n\u00b2) y en los costos 3D o(n\u00b3) para las capas dominadas por advecci\u00f3n. La sobrecarga crece cuadr\u00e1tica o c\u00fabicamente.<\/p>\n<p>La adaptaci\u00f3n anisotr\u00f3pica respeta la direccionalidad. Los elementos se estiran a lo largo del flujo (alta relaci\u00f3n de aspecto, alineado con flujo) mientras permanecen gruesos a trav\u00e9s de \u00e9l. La misma precisi\u00f3n se logra con <strong>uno a dos \u00f3rdenes de menos grados de libertad<\/strong> en las aplicaciones publicadas.<\/p>\n<h3>Los n\u00fameros concretos<\/h3>\n<p>Quieres n\u00fameros, no solo teor\u00eda. Esto es lo que el tutorial STEP-30 de Deal.ii, un ejemplo de transporte de DG en ejecuci\u00f3n, en realidad informa:<\/p>\n<table>\n<thead>\n<tr>\n<th>Estrategia<\/th>\n<th>Ciclo 5 DOFS<\/th>\n<th>costo relativo<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Refinamiento isotr\u00f3pico<\/td>\n<td>16.076<\/td>\n<td>Base<\/td>\n<\/tr>\n<tr>\n<td>Refinamiento anisotr\u00f3pico<\/td>\n<td>4.120<\/td>\n<td><strong>4\u00d7 menos<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>La estrategia anisotr\u00f3pica logra la misma precisi\u00f3n de la soluci\u00f3n con un factor de <strong>4 menos grados de libertad<\/strong> sobre el mismo problema. Esto es directamente verificable desde la salida del tutorial.<\/p>\n<p>La literatura empuja a\u00fan m\u00e1s. Revisi\u00f3n de la d\u00e9cada de 2016 de Alauzet, la s\u00edntesis m\u00e1s citada del campo (285 citas), documenta reducciones de DOF que van desde <strong>15\u00d7 a 30\u00d7<\/strong> en aplicaciones de CFD 3D utilizando mallas anisotr\u00f3picas de alto aspecto ratios. Los n\u00fameros dependen de la complejidad del problema, pero la tendencia es consistente: el refinamiento consciente de la direcci\u00f3n supera constantemente las estrategias isotr\u00f3picas.<\/p>\n<blockquote><p><strong>Related<\/strong>: Si est\u00e1 trabajando con problemas dominados por la advecci\u00f3n y a\u00fan no ha cubierto las t\u00e9cnicas de estabilizaci\u00f3n, nuestro [SUPG stabilization guide](https:\/\/matforge.org\/advection-dominated-problems-supg-stabilization\/){rel=\"nofollow\" target=\"_blank\"} Cubre el lado de discretizaci\u00f3n del mismo espacio de problemas. Las mallas anisotr\u00f3picas y el SUPG a menudo se usan juntas.<\/p><\/blockquote>\n<hr>\n<h2>Lo que la mayor\u00eda de la gente se equivoca sobre el refinamiento de la malla<\/h2>\n<p>Antes de sumergirnos en la mec\u00e1nica, abordemos un concepto err\u00f3neo com\u00fan.<\/p>\n<p><strong>La mayor\u00eda de los investigadores piensan que \"m\u00e1s resoluci\u00f3n\" significa \"c\u00e9lulas m\u00e1s peque\u00f1as en todas partes\".<\/strong> Esa es la mentalidad isotr\u00f3pica, y es costosa. Cuando el gradiente de soluci\u00f3n solo vive en una direcci\u00f3n (a lo largo del flujo), refinar en todas partes desperdicia recursos computacionales. Est\u00e1s resolviendo un problema direccional con una estrategia de soluci\u00f3n isotr\u00f3pica.<\/p>\n<p><strong>La correcci\u00f3n<\/strong>: la adaptaci\u00f3n de la malla debe alinearse con la f\u00edsica, no contra ella. Si el frente de concentraci\u00f3n es empinado a trav\u00e9s de la corriente pero suave a lo largo de ella, estire los elementos para que coincidan. Esa es la idea central detr\u00e1s del refinamiento anisotr\u00f3pico, y es la raz\u00f3n por la que ves esas reducciones DOF de 4\u00d7 a 30\u00d7.<\/p>\n<p>Esta no es una idea nueva: ha sido parte de la literatura de adaptaci\u00f3n de malla desde la d\u00e9cada de 1990. Lo que ha cambiado es la accesibilidad. Las herramientas nativas de Python (animados, pragm\u00e1ticas) ahora hacen que la adaptaci\u00f3n anisotr\u00f3pica sea pr\u00e1ctica para los investigadores que escriben Python, no C++.<\/p>\n<hr>\n<h2>C\u00f3mo funciona la adaptaci\u00f3n de malla anisotr\u00f3pica<\/h2>\n<p>La canalizaci\u00f3n tiene tres etapas: calcular el hessiano de la soluci\u00f3n, derivar el tensor m\u00e9trico y remesh. Vayamos a trav\u00e9s de cada paso.<\/p>\n<h3>Paso 1: Calcular el Hessiano<\/h3>\n<p>Comience con la soluci\u00f3n escalar \u03c6 (temperatura, concentraci\u00f3n, cualquiera que sea su variable). La arpillera de \u03c6 captura la curvatura de la soluci\u00f3n:<\/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, el Hessiano es una matriz sim\u00e9trica de 2 \u00d7 2. En 3D, es 3\u00d73. El hessiano te dice d\u00f3nde se curva la soluci\u00f3n m\u00e1s bruscamente, esencialmente, d\u00f3nde necesitas resoluci\u00f3n.<\/p>\n<blockquote><p><strong>Nota pr\u00e1ctica<\/strong>: En la pr\u00e1ctica se prefiere la arpillera absoluta (la parte positiva de H). Cuando la soluci\u00f3n tiene un frente afilado, desea resolver la curvatura en la direcci\u00f3n <em>a trav\u00e9s de <\/em> el frente, no a lo largo de ella. El uso de la arpillera absoluta evita la ambig\u00fcedad del signo de la arpillera cruda.<\/p><\/blockquote>\n<h3>Paso 2: Derivaci\u00f3n del tensor m\u00e9trico<\/h3>\n<p>El tensor m\u00e9trico m se deriva de los valores propios y vectores propios de Hessiano absoluto. Este es el paso matem\u00e1tico central.<\/p>\n<ol>\n<li><strong>eigen-decomponer<\/strong> El arpillera absoluto: h_abs = v \u00b7 \u03bb \u00b7 v\u1d40, donde \u03bb contiene valores propios y V contiene vectores propios<\/li>\n<li><strong>Construir la m\u00e9trica<\/strong>: m = v \u00b7 |\u03bb| \u00b7 V\u1d40, donde |\u03bb| es la matriz diagonal de las magnitudes de valor propio<\/li>\n<\/ol>\n<p>El tensor m\u00e9trico codifica los tama\u00f1os y orientaciones de los elementos deseados. Cada entrada diagonal en |\u03bb| Establece la resoluci\u00f3n deseada en esa direcci\u00f3n: los valores propios m\u00e1s grandes significan una resoluci\u00f3n m\u00e1s fina. Los vectores propios (columnas de V) definen la orientaci\u00f3n: los elementos deben extenderse a lo largo del vector propio asociado con el valor propio m\u00e1s grande.<\/p>\n<p><strong>En la pr\u00e1ctica<\/strong>: el tensor m\u00e9trico es una matriz sim\u00e9trica positiva-definida. Sus valores propios definen los tama\u00f1os de los elementos (la ra\u00edz cuadrada inversa da el espaciado deseado) y sus vectores propios definen la orientaci\u00f3n del elemento. La m\u00e9trica se eval\u00faa en cada nodo de malla y se utiliza durante la remalla.<\/p>\n<blockquote><p><strong>Source<\/strong>: El informe t\u00e9cnico de POLIMI proporciona una derivaci\u00f3n detallada del tensor de m\u00e9tricas de los valores propios\/vectores propios de Hessiano absoluto, incluidas las f\u00f3rmulas de dimensionamiento de elementos basados en la equidistribuci\u00f3n. Ver: <a href=\"https:\/\/www.mate.polimi.it\/biblioteca\/add\/qmox\/35-2025.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Informe t\u00e9cnico de POLIMI (35-2025)<\/a><\/p><\/blockquote>\n<h3>Paso 3: Remachado<\/h3>\n<p>Con el campo m\u00e9trico calculado a trav\u00e9s de la malla, sigue la reintegraci\u00f3n. El remesher usa el tensor m\u00e9trico en cada nodo para determinar el tama\u00f1o y la orientaci\u00f3n del elemento. Los paquetes est\u00e1ndar son:<\/p>\n<ul>\n<li><strong>BAMG<\/strong> (Generador de malla adaptativa de l\u00edmites) \u2014 La biblioteca cl\u00e1sica de C++<\/li>\n<li><strong>MmgTools<\/strong>: el contenedor moderno con soporte de API de Python. Vea el <a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">Tutorial de adaptaci\u00f3n de MMGTools<\/a><\/li>\n<\/ul>\n<p>Durante la reintegraci\u00f3n, el Mesher respeta la m\u00e9trica: estira los elementos a lo largo de la direcci\u00f3n principal (vector mayor de valor propio mayor), refina donde los valores propios son grandes y los toscos donde son peque\u00f1os. El resultado es una malla alineada con la estructura de la soluci\u00f3n.<\/p>\n<h3>Una nota sobre el intercambio de bordes<\/h3>\n<p>Cuando el tensor m\u00e9trico dicta un fuerte estiramiento direccional, la conectividad de malla local puede degradarse. Los elementos se vuelven muy sesgados y las ca\u00eddas de la calidad de la malla. <strong>Intercambio de borde<\/strong> soluciona esto.<\/p>\n<p>El intercambio de bordes reemplaza un borde en un elemento tetra\u00e9drico (o triangular) con un borde diferente, manteniendo una conectividad v\u00e1lida del elemento al tiempo que reduce el sesgo. MMGTools implementa cinco herramientas de minimizaci\u00f3n locales para este prop\u00f3sito, incluidos intercambios de bordes, adiciones\/supresiones de v\u00e9rtice y reubicaci\u00f3n de v\u00e9rtice, espec\u00edficamente para preservar la calidad de la malla cuando el tensor m\u00e9trico exige anisotrop\u00eda extrema.<\/p>\n<p><strong>Omita el intercambio de bordes y la calidad de su malla se degrada.<\/strong> La m\u00e9trica le indicar\u00e1 a The Meser que estire elementos, pero sin los operadores de conectividad local, esos elementos estirados se vuelven inutilizables para el solucionador. El intercambio de bordes no es opcional cuando se usa una adaptaci\u00f3n s\u00f3lida basada en m\u00e9tricas.<\/p>\n<hr>\n<h2>Estimadores de errores: basado en recuperaci\u00f3n frente a objetivos<\/h2>\n<p>Antes de que se ejecute cualquier adaptaci\u00f3n, necesita una estimaci\u00f3n de error. \u00bfD\u00f3nde est\u00e1 la soluci\u00f3n incorrecta? Dos familias de estimadores dominan la literatura.<\/p>\n<h3>Estimaci\u00f3n basada en recuperaci\u00f3n<\/h3>\n<p>Los estimadores basados en recuperaci\u00f3n (tambi\u00e9n llamados libres de residuos o tipo ZZ) calculan el error comparando la soluci\u00f3n num\u00e9rica con una soluci\u00f3n \"recubierta\" de mayor calidad.<\/p>\n<p><strong>C\u00f3mo funciona<\/strong>:<\/p>\n<ol>\n<li>Calcule la soluci\u00f3n num\u00e9rica en la malla actual<\/li>\n<li>Reconstruir una versi\u00f3n m\u00e1s suave de la soluci\u00f3n (recuperar gradientes, reconstruir un campo de orden superior)<\/li>\n<li>La diferencia entre los dos es el indicador de error<\/li>\n<\/ol>\n<p><strong>El estimador formaggia-perotto<\/strong> es el ejemplo can\u00f3nico. Formaggia &amp; Micheletti (2004) combin\u00f3 la recuperaci\u00f3n de Zienkiewicz-Zhu con estimaciones de interpolaci\u00f3n anisotr\u00f3pica para producir un estimador de error s\u00f3lido para los problemas de advecci\u00f3n-difusi\u00f3n-reacci\u00f3n. Es 151 citado, ampliamente utilizado y f\u00e1cil de implementar.<\/p>\n<p><strong>pros<\/strong>: computacionalmente eficiente, bien establecido, no requiere resolver ecuaciones adicionales<br> <strong>cons<\/strong>: la estimaci\u00f3n del error es agn\u00f3stica de la soluci\u00f3n: le dice d\u00f3nde est\u00e1 la soluci\u00f3n incorrecta, pero no c\u00f3mo ese error afecta su cantidad espec\u00edfica de inter\u00e9s<\/p>\n<p><strong>Fuente<\/strong>: Formaggia &amp; El art\u00edculo original de Micheletti \u2014 <a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/S0168927404000972\" target=\"_blank\" rel=\"nofollow noopener\">An\u00e1lisis de errores a posteriori a posteriori para problemas de advecci\u00f3n-difusi\u00f3n-reacci\u00f3n<\/a> \u2014 sigue siendo la referencia principal para el marco Formaggia-Perotto.<\/p>\n<h3>Estimaci\u00f3n orientada a objetivos (basada en conjunto)<\/h3>\n<p>La estimaci\u00f3n orientada a objetivos (tambi\u00e9n llamada base adjunta o residual de ponderaci\u00f3n dual\/DWR) va un paso m\u00e1s all\u00e1. En lugar de medir el error general, mide el error <strong>relativo a una cantidad espec\u00edfica de inter\u00e9s<\/strong>, la integral que realmente le importa.<\/p>\n<p><strong>C\u00f3mo funciona<\/strong>:<\/p>\n<ol>\n<li>Defina su \"cantidad de inter\u00e9s\" (por ejemplo, flujo total en el flujo de salida, tensi\u00f3n m\u00e1xima, temperatura integrada)<\/li>\n<li>Resuelva la ecuaci\u00f3n adjunta: una ecuaci\u00f3n de sensibilidad que le dice c\u00f3mo el error de soluci\u00f3n afecta su cantidad de inter\u00e9s<\/li>\n<li>El producto del error primario y la sensibilidad adjunta proporciona la estimaci\u00f3n de error orientado a objetivos<\/li>\n<\/ol>\n<p>El documento de Wallwork 2019 demuestra esto claramente en el ecosistema Firedrake. La soluci\u00f3n adjunta proporciona un <strong>mapa de sensibilidad<\/strong>: las regiones donde m\u00e1s importan los errores (altos valores adjuntos) se refinan, las regiones donde los errores no afectan su cantidad de inter\u00e9s se engrosan.<\/p>\n<p><strong>Pros<\/strong>: Precisi\u00f3n espec\u00edfica de la optimizaci\u00f3n: la adaptaci\u00f3n enfoca los recursos exactamente donde impactan su objetivo<br> <strong>cons<\/strong>: requiere resolver una ecuaci\u00f3n adjunta adicional; computacionalmente m\u00e1s caro; M\u00e1s complejo de implementar<\/p>\n<p><strong>Source<\/strong>: Wallwork 2019 \u2014 <a href=\"https:\/\/eartharxiv.org\/repository\/object\/504\/download\/1091\/\" target=\"_blank\" rel=\"nofollow noopener\">La estimaci\u00f3n de errores orientado a objetivos y la adaptaci\u00f3n de malla para Firedrake<\/a> proporciona los detalles de la implementaci\u00f3n de Firedrake y la gu\u00eda pr\u00e1ctica.<\/p>\n<h3>Cu\u00e1ndo elegir cu\u00e1l<\/h3>\n<table>\n<thead>\n<tr>\n<th>Situaci\u00f3n<\/th>\n<th>Estimador recomendado<\/th>\n<th>Por qu\u00e9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Mejora de la precisi\u00f3n general<\/td>\n<td>Basado en recuperaci\u00f3n (Formaggia-perotto, ZZ)<\/td>\n<td>Sencillo, r\u00e1pido, bien establecido<\/td>\n<\/tr>\n<tr>\n<td>Su objetivo es una integral o valor de campo espec\u00edfico<\/td>\n<td>Orientado a objetivos (adjunta\/DWR)<\/td>\n<td>Se adapta precisamente donde importa<\/td>\n<\/tr>\n<tr>\n<td>Presupuesto de c\u00e1lculo limitado<\/td>\n<td>basado en la recuperaci\u00f3n<\/td>\n<td>Una soluci\u00f3n, una adaptaci\u00f3n<\/td>\n<\/tr>\n<tr>\n<td>Simulaci\u00f3n de alto riesgo donde cada DOF cuenta<\/td>\n<td>orientado a objetivos<\/td>\n<td>Evita desperdiciar la resoluci\u00f3n en regiones irrelevantes<\/td>\n<\/tr>\n<tr>\n<td>Cantidad de inter\u00e9s desconocida<\/td>\n<td>basado en la recuperaci\u00f3n<\/td>\n<td>No se necesita adjunto, amplia cobertura de error<\/td>\n<\/tr>\n<tr>\n<td>Problema de optimizaci\u00f3n o dise\u00f1o<\/td>\n<td>orientado a objetivos<\/td>\n<td>Adaptado a su funci\u00f3n objetivo<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote><p><strong>Nuestra recomendaci\u00f3n<\/strong>: Comience con la estimaci\u00f3n basada en la recuperaci\u00f3n. Es m\u00e1s simple, bien documentado y funciona bien para la mayor\u00eda de los casos. Pase a la adaptaci\u00f3n orientada a objetivos cuando tenga una cantidad espec\u00edfica de inter\u00e9s y pueda justificar la sobrecarga de resoluci\u00f3n adjunta. El ejemplo de Firedrake de Wallwork 2019 es una excelente referencia si elige el camino orientado a objetivos.<\/p><\/blockquote>\n<hr>\n<h2>Patrones de implementaci\u00f3n<\/h2>\n<p>La teor\u00eda es clara. La implementaci\u00f3n es donde el caucho se encuentra con el camino. Cubramos los patrones principales en diferentes ecosistemas.<\/p>\n<h3>Intercambio de bordes y BAMG\/MMGTools<\/h3>\n<p>BAMG (Boundary Adaptive Mesh Generator) es la biblioteca C++ original para la adaptaci\u00f3n anisotr\u00f3pica basada en m\u00e9tricas. MMGTools lo moderniz\u00f3 con una API de Python y una herramienta de l\u00ednea de comandos.<\/p>\n<p><strong>El flujo de trabajo de MMGTools<\/strong>:<\/p>\n<ol>\n<li>Calcule el campo m\u00e9trico (hessiano \u2192 tensor) en su malla<\/li>\n<li>Exporte la m\u00e9trica como un archivo legible por MMG<\/li>\n<li>Ejecutar <code>mmg2d -h1 mesh.in<\/code> (o <code>mmg3d<\/code> para 3D) con <code>-hs<\/code> Indicadores para dimensionamiento anisotr\u00f3pico<\/li>\n<li>La herramienta lee la m\u00e9trica, realiza el intercambio de bordes y genera una malla adaptada<\/li>\n<\/ol>\n<p>El tutorial de MMGTools en <a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">mmgtools.org\/tutorials<\/a> Cubre el uso de la l\u00ednea de comandos y la API de Python. Es la gu\u00eda m\u00e1s pr\u00e1ctica para pasar del tensor m\u00e9trico a la malla adaptada.<\/p>\n<h3>Animaci\u00f3n \/ Drag\u00f3n de fuego<\/h3>\n<p>Animate es una canalizaci\u00f3n completa de Python-native para la adaptaci\u00f3n anisotr\u00f3pica basada en m\u00e9tricas. Est\u00e1 construido sobre Firedrake y se integra con Pragmatic (el backend del kit de herramientas de malla adaptable anisotr\u00f3pico paralelo).<\/p>\n<p><strong>El flujo de trabajo animado<\/strong>:<\/p>\n<ol>\n<li>Crear una malla inicial de Firedrake<\/li>\n<li>Resuelve tu PDE para obtener el campo escalar<\/li>\n<li>Calcule el tensor m\u00e9trico a partir de la soluci\u00f3n Hessiano<\/li>\n<li>Definir un campo m\u00e9trico en la malla<\/li>\n<li>Transformaci\u00f3n de la malla de Animate: La malla se adapta conservando el campo<\/li>\n<\/ol>\n<p>Animate proporciona dos m\u00f3dulos:<\/p>\n<ul>\n<li><strong>Movimiento<\/strong>: Estrategias de movimiento de malla (remapeo suave de campos en mallas adaptadas)<\/li>\n<li><strong>Goalie<\/strong>: adaptaci\u00f3n orientada a objetivos con solucionadores adjuntos<\/li>\n<\/ul>\n<blockquote><p><strong>Source<\/strong>: animar docs \u2014 <a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">mesh-adaptation.gitHub.io<\/a> \u2014 y pragmatic \u2014 <a href=\"https:\/\/github.com\/meshadaptation\/pragmatic\" target=\"_blank\" rel=\"nofollow noopener\">meshaDaptation\/pragmatic on github<\/a> \u2014 Proporcione el total Pipeline nativo de Python. Esta es la mejor referencia para los investigadores basados en Python.<\/p><\/blockquote>\n<h3>Comparaci\u00f3n de OFERTA.II<\/h3>\n<p>Deal.ii maneja el refinamiento anisotr\u00f3pico de forma nativa a trav\u00e9s de sus banderas <code>RefinementCase::cut_x\/y\/z<\/code>. El tutorial STEP-30 es el ejemplo can\u00f3nico:<\/p>\n<ul>\n<li>El tutorial resuelve la ecuaci\u00f3n de transporte lineal usando DG<\/li>\n<li>El refinamiento anisotr\u00f3pico utiliza <code>RefinementCase::cut_x<\/code> (y y\/z en 3D) para refinar solo en la direcci\u00f3n del flujo<\/li>\n<li>El algoritmo del indicador de salto identifica gradientes alineados con flujo y divide los elementos en consecuencia<\/li>\n<li>Salida: 4.120 DOFS (anisotr\u00f3pico) vs 16.076 (isotr\u00f3pico) en el ciclo 5<\/li>\n<\/ul>\n<p>El enfoque de Deal.ii es <strong>m\u00e1s \u00e1spero, no m\u00e1s fino<\/strong>: no se remalla, refina los elementos existentes en direcciones espec\u00edficas. Esto es eficiente para mallas estructuradas o semiestructuradas, pero menos flexible que la red de malla basada en m\u00e9tricas para casos no estructurados.<\/p>\n<blockquote><p><strong>Related<\/strong>: Nuestro [discontinuous Galerkin tutorial](https:\/\/matforge.org\/discontinuo-galerkin-method-tutorial\/){rel=\"nofollow\" target=\"_blank\"} cubre la discretizaci\u00f3n de DG, que com\u00fanmente se empareja con refinamiento anisotr\u00f3pico en problemas dominados por la advecci\u00f3n.<\/p><\/blockquote>\n<hr>\n<h2>Cu\u00e1ndo usar anisotr\u00f3pico vs isotr\u00f3pico<\/h2>\n<p>No todos los problemas se benefician de la adaptaci\u00f3n anisotr\u00f3pica. Aqu\u00ed est\u00e1 el marco de decisi\u00f3n:<\/p>\n<table>\n<thead>\n<tr>\n<th>Situaci\u00f3n<\/th>\n<th>estrategia recomendada<\/th>\n<th>Por qu\u00e9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Direcci\u00f3n de flujo conocida y consistente<\/td>\n<td><strong>Anisotr\u00f3pico<\/strong><\/td>\n<td>Reducci\u00f3n 4\u00d7\u201330\u00d7 DOF, alineada con la f\u00edsica<\/td>\n<\/tr>\n<tr>\n<td>La direcci\u00f3n del flujo var\u00eda espacialmente<\/td>\n<td><strong>Mixto<\/strong> (anisotr\u00f3pico en regiones de flujo, isotr\u00f3pico en otros lugares)<\/td>\n<td>Captura la direccionalidad donde importa<\/td>\n<\/tr>\n<tr>\n<td>Direcci\u00f3n de flujo desconocida<\/td>\n<td><strong>isotr\u00f3pico<\/strong><\/td>\n<td>No adivine; Adaptarse de forma conservadora<\/td>\n<\/tr>\n<tr>\n<td>Soluci\u00f3n suave, sin degradados afilados<\/td>\n<td><strong>isotr\u00f3pico<\/strong><\/td>\n<td>Sin estructura direccional que explotar<\/td>\n<\/tr>\n<tr>\n<td>Simulaci\u00f3n 3D, presupuesto ajustado<\/td>\n<td><strong>Anisotr\u00f3pico<\/strong><\/td>\n<td>O(n\u00b3) isotr\u00f3pico es prohibitivo; escalas anisotr\u00f3picas mejor<\/td>\n<\/tr>\n<tr>\n<td>Validaci\u00f3n de la investigaci\u00f3n, comparaci\u00f3n de referencia<\/td>\n<td><strong>Ejecutar ambos<\/strong><\/td>\n<td>documentar la diferencia; Justifica tu elecci\u00f3n<\/td>\n<\/tr>\n<tr>\n<td>La calidad de la malla ya es mala<\/td>\n<td><strong>Primero isotr\u00f3pico<\/strong> (luego anisotr\u00f3pico)<\/td>\n<td>Fijar la calidad antes de la adaptaci\u00f3n<\/td>\n<\/tr>\n<tr>\n<td>Adaptaci\u00f3n orientada a objetivos disponible<\/td>\n<td><strong>Anisotr\u00f3pico orientado a objetivos<\/strong><\/td>\n<td>adaptado a su cantidad de inter\u00e9s<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote><p><strong>Nuestra recomendaci\u00f3n<\/strong>: Cuando conoces la direcci\u00f3n del flujo y la soluci\u00f3n tiene gradientes n\u00edtidos alineados con ella, <strong>La adaptaci\u00f3n anisotr\u00f3pica deber\u00eda ser tu estrategia predeterminada<\/strong>. El refinamiento isotr\u00f3pico es la alternativa: \u00faselo cuando la direcci\u00f3n del flujo var\u00eda, cuando no puede calcular la m\u00e9trica de manera confiable o al validar los resultados de la l\u00ednea base.<\/p><\/blockquote>\n<hr>\n<h2>Flujo de trabajo pr\u00e1ctico: de cero a malla adaptada<\/h2>\n<p>Aqu\u00ed hay un flujo de trabajo concreto que puede seguir. Usaremos la canalizaci\u00f3n Animate\/Firedrake como el ejemplo nativo de Python, pero los pasos se aplican en todos los ecosistemas.<\/p>\n<h3>Paso 1: generar una malla inicial<\/h3>\n<p>Comience con una malla isotr\u00f3pica gruesa. No necesitas refinamiento en esta etapa; este es solo tu punto de partida.<\/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>Paso 2: Resuelve el PDE<\/h3>\n<p>Resuelva su problema dominado por advecci\u00f3n en la malla inicial.<\/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>Paso 3: Calcule el tensor m\u00e9trico<\/h3>\n<p>Extraiga el Hessian de la soluci\u00f3n y convi\u00e9rtalo en un campo m\u00e9trico.<\/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>Paso 4: Definir el campo de m\u00e9trica<\/h3>\n<p>Asigne el tensor m\u00e9trico a los nodos de malla.<\/p>\n<pre><code class=\"language-python\">from animate import MetricField\n\nmetric_field = MetricField(mesh, metric_tensor)\n<\/code><\/pre>\n<h3>Paso 5: adaptar la malla<\/h3>\n<p>Llame a la rutina de adaptaci\u00f3n. Animate maneja la reintegraci\u00f3n, el intercambio de bordes y la interpolaci\u00f3n de campo.<\/p>\n<pre><code class=\"language-python\">from animate import Movement\n\nmesh = Movement.apply(mesh, metric_field)\n<\/code><\/pre>\n<p>La malla ahora est\u00e1 adaptada: los elementos se estiran a lo largo de la direcci\u00f3n del flujo, se refinan donde la soluci\u00f3n tiene gradientes afilados y se engrosan donde la soluci\u00f3n es lisa. El campo de soluci\u00f3n se interpola en la nueva malla.<\/p>\n<h3>Paso 6: Resolver (opcional)<\/h3>\n<p>Con la malla adaptada, vuelva a ejecutar su simulaci\u00f3n. La soluci\u00f3n deber\u00eda converger m\u00e1s r\u00e1pido (menos DOF) y producir la misma precisi\u00f3n que la l\u00ednea base isotr\u00f3pica.<\/p>\n<h3>Paso 7: Iterar<\/h3>\n<p>La adaptaci\u00f3n es t\u00edpicamente iterativa. Resuelves, adaptas, resuelves y repites hasta que la malla converge. La canalizaci\u00f3n de Animate est\u00e1 dise\u00f1ada para m\u00faltiples ciclos de adaptaci\u00f3n.<\/p>\n<blockquote><p><strong>Source<\/strong>: animar documentos \u2014 <a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">mesh-adaptation.github.io<\/a> \u2014 Cubre toda la tuber\u00eda desde la malla inicial hasta la malla adaptada. El flujo de trabajo anterior sigue su secuencia recomendada.<\/p><\/blockquote>\n<hr>\n<h2>\u00bfQu\u00e9 pasa con la calidad de la malla?<\/h2>\n<p>Aqu\u00ed hay un punto que vale la pena enfatizar: <strong>La calidad de la malla determina si su malla adaptada incluso funciona<\/strong>.<\/p>\n<p>Si sigue el <a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\" target=\"_blank\" rel=\"nofollow noopener\">gu\u00eda de calidad de malla<\/a> las seis m\u00e9tricas de calidad (calidad ortogonal, asimetr\u00eda, relaci\u00f3n de aspecto, relaci\u00f3n jacobiana, relaci\u00f3n de expansi\u00f3n volum\u00e9trica y l\u00edmites de \u00e1ngulo). El refinamiento anisotr\u00f3pico cambia dr\u00e1sticamente las relaciones de aspecto: los elementos se estiran. Eso es intencional. Pero las m\u00e9tricas <strong>otras<\/strong> deben permanecer dentro de rangos seguros.<\/p>\n<p><strong>La regla clave<\/strong>: el refinamiento anisotr\u00f3pico no debe degradar el sesgo, la relaci\u00f3n jacobiana o los \u00e1ngulos m\u00ednimos m\u00e1s all\u00e1 de los umbrales aceptables. El intercambio de bordes existe exactamente por esta raz\u00f3n.<\/p>\n<hr>\n<h2>Errores comunes y c\u00f3mo evitarlos<\/h2>\n<h3>Error #1: Intercambio de bordes omitiendo<\/h3>\n<p><strong>Lo que sucede<\/strong>: el tensor m\u00e9trico estira los elementos a lo largo del flujo. Sin intercambio de bordes, esos elementos estirados se vuelven muy sesgados. Su informe de calidad de malla muestra advertencias rojas y su solucionador lucha o diverge.<\/p>\n<p><strong>C\u00f3mo evitarlo<\/strong>: Siempre incluya el intercambio de bordes en su canalizaci\u00f3n de adaptaci\u00f3n. MMGTools implementa cinco herramientas de minimizaci\u00f3n locales espec\u00edficamente para esto. En Deal.ii, el enfoque <code>RefinementCase::cut_x\/y\/z<\/code> evita el problema al refinar los elementos existentes en lugar de volver a malla.<\/p>\n<h3>Error #2: Uso de refinamiento isotr\u00f3pico para problemas direccionales<\/h3>\n<p><strong>Lo que sucede<\/strong>: Refinas en todas partes por igual. Sus DOF crecen como O(n\u00b2) en 2D u O(N\u00b3) en 3D. La simulaci\u00f3n dura m\u00e1s tiempo y la mejora de la precisi\u00f3n es marginal. Desperdicias recursos computacionales en regiones donde la soluci\u00f3n ya es fluida.<\/p>\n<p><strong>C\u00f3mo evitarlo<\/strong>: Ejecute primero un ciclo de adaptaci\u00f3n anisotr\u00f3pico. Compare el recuento de DOF. Si la malla anisotr\u00f3pica logra la misma precisi\u00f3n con menos DOF (y casi siempre lo hace para los problemas dominados por advecci\u00f3n), \u00faselo.<\/p>\n<h3>Error #3: Confusos estimadores basados en recuperaci\u00f3n y orientados a objetivos<\/h3>\n<p><strong>Lo que sucede<\/strong>: utiliza un estimador basado en la recuperaci\u00f3n pero espera una precisi\u00f3n orientada a objetivos. La adaptaci\u00f3n mejora la precisi\u00f3n de la soluci\u00f3n, pero su cantidad espec\u00edfica de inter\u00e9s no mejora como se esperaba. Est\u00e1s confundido.<\/p>\n<p><strong>C\u00f3mo evitarlo<\/strong>: Relaciona el estimador con tu objetivo. Si desea una mejora de la precisi\u00f3n general, use la recuperaci\u00f3n basada en (Formaggia-Perotto, ZZ). Si desea optimizar un valor de campo o integral espec\u00edfico, utilice orientado a objetivos (adjoint\/DWR). Sirven diferentes prop\u00f3sitos.<\/p>\n<h3>Error #4: Suponiendo que la adaptaci\u00f3n sea una operaci\u00f3n de un solo tiro<\/h3>\n<p><strong>Qu\u00e9 sucede<\/strong>: te adaptas una vez, resuelves una vez y te detienes. La malla es \"suficientemente buena\", pero podr\u00eda obtener una mejor precisi\u00f3n con otro ciclo. La soluci\u00f3n no ha convergido completamente en la malla adaptada.<\/p>\n<p><strong>C\u00f3mo evitarlo<\/strong>: Ejecute m\u00faltiples ciclos de adaptaci\u00f3n. Despu\u00e9s de cada ciclo, resuelve, calcula la nueva m\u00e9trica y adaptate de nuevo. Detener cuando los cambios de malla son insignificantes entre ciclos (convergencia de malla).<\/p>\n<h3>Error #5: Uso de adaptaci\u00f3n anisotr\u00f3pica en soluciones suaves<\/h3>\n<p><strong>Qu\u00e9 sucede<\/strong>: La soluci\u00f3n es fluida en todas partes. Calcula el tensor m\u00e9trico. Todos los valores propios son peque\u00f1os. La adaptaci\u00f3n no cambia nada significativo. has perdido el tiempo.<\/p>\n<p><strong>C\u00f3mo evitarlo<\/strong>: primero verifique la estructura de la soluci\u00f3n. Si los degradados son peque\u00f1os y suaves en todas partes, el refinamiento isotr\u00f3pico o incluso su malla inicial es suficiente. La adaptaci\u00f3n anisotr\u00f3pica solo vale la pena cuando hay una estructura direccional que explotar.<\/p>\n<hr>\n<h2>Una comparaci\u00f3n r\u00e1pida del DOF<\/h2>\n<p>Volvamos a los n\u00fameros. Aqu\u00ed hay un resumen visual de los datos del paso 30 de Deal.II:<\/p>\n<div style=\"text-align: center; margin: 2rem 0;\">\n<!-- Isotropic bar --><p><\/p>\n<p>16.076 DOFS<br> Isotr\u00f3pico:<br> <!-- Barra anisotr\u00f3pica --><\/p>\n<p>4,120 DOFS<br> Anisotr\u00f3pico:<br> <!-- Anotaci\u00f3n --><br> 4\u00d7 Menos grados de libertad para la misma precisi\u00f3n<br><\/p><\/div>\n<p>El enfoque isotr\u00f3pico utiliza casi <strong>cuatro veces m\u00e1s grados de libertad<\/strong>. En 3D, esos n\u00fameros se combinan dr\u00e1sticamente: la literatura informa de 15 \u00d7 a 30 \u00d7 diferencias para las capas dominadas por advecci\u00f3n. El costo del refinamiento isotr\u00f3pico es prohibitivo para las simulaciones a gran escala.<\/p>\n<hr>\n<h2>Adaptaci\u00f3n orientada a objetivos: la frontera avanzada<\/h2>\n<p>Si la estimaci\u00f3n basada en la recuperaci\u00f3n es el est\u00e1ndar, la adaptaci\u00f3n orientada a objetivos es la frontera. Hace una pregunta m\u00e1s espec\u00edfica: \"\u00bfD\u00f3nde afecta el error de soluci\u00f3n a la cantidad que realmente me importa?\"<\/p>\n<p>El documento Firedrake de Wallwork 2019 demuestra el flujo de trabajo:<\/p>\n<ol>\n<li><strong>Definir su cantidad de inter\u00e9s<\/strong> \u2014 por ejemplo, flujo total a trav\u00e9s de un l\u00edmite de salida, concentraci\u00f3n m\u00e1xima en un punto<\/li>\n<li><strong>Resolver la ecuaci\u00f3n adjunta<\/strong>: la ecuaci\u00f3n de sensibilidad que te dice c\u00f3mo se propagan los errores a tu cantidad de inter\u00e9s<\/li>\n<li><strong>Compute el residuo de doble ponderaci\u00f3n<\/strong> \u2014 El producto de error primario y sensibilidad adjunta proporciona la estimaci\u00f3n de error orientado a la meta<\/li>\n<li><strong>Adaptar<\/strong> \u2014 Refinar donde la sensibilidad adjunta y el error primario son grandes<\/li>\n<\/ol>\n<p>El resultado es <strong>adaptaci\u00f3n espec\u00edfica de optimizaci\u00f3n<\/strong>. Las regiones que no afectan su cantidad de inter\u00e9s se engrosan. regiones que se refinan agresivamente. La compensaci\u00f3n: necesita resolver la ecuaci\u00f3n adjunta (una soluci\u00f3n adicional) y la implementaci\u00f3n es m\u00e1s compleja.<\/p>\n<blockquote><p><strong>Cu\u00e1ndo usarlo<\/strong>: cuando su simulaci\u00f3n tiene una m\u00e9trica objetivo clara: flujo total, producci\u00f3n integrada, presi\u00f3n m\u00e1xima. Cuando cada grado de libertad cuenta, la adaptaci\u00f3n orientada a objetivos vale la pena.<\/p><\/blockquote>\n<hr>\n<h2>Antes de comenzar: una lista de verificaci\u00f3n<\/h2>\n<blockquote><p><strong>Nuestra recomendaci\u00f3n<\/strong>: Al resolver los problemas dominados por la advecci\u00f3n, la adaptaci\u00f3n anisotr\u00f3pica debe ser su estrategia predeterminada cuando se conoce la direcci\u00f3n del flujo. El refinamiento isotr\u00f3pico debe ser la alternativa cuando la direcci\u00f3n del flujo var\u00eda espacialmente o es desconocida.<\/p><\/blockquote>\n<p>Antes de ejecutar la adaptaci\u00f3n anisotr\u00f3pica, verifique:<\/p>\n<ul>\n<li>[ ] <strong>La direcci\u00f3n del flujo es conocida o dominante<\/strong> \u2014 el tensor m\u00e9trico ser\u00e1 direccional; El flujo isotr\u00f3pico requiere mallas isotr\u00f3picas<\/li>\n<li>[ ] <strong>N\u00famero alto de peclet confirmado<\/strong> (PE &gt;&gt; 2) \u2014 Si domina la difusi\u00f3n, el refinamiento isotr\u00f3pico es suficiente<\/li>\n<li>[ ] <strong>La calidad de la malla es aceptable<\/strong> \u2014 Arregle el sesgo, la relaci\u00f3n jacobiana y los l\u00edmites del \u00e1ngulo antes de la adaptaci\u00f3n<\/li>\n<li>[ ] <strong>Se incluye el intercambio de bordes<\/strong> \u2014 El estiramiento direccional degrada la conectividad sin ella<\/li>\n<li>[ ] <strong>estimador elegido<\/strong> \u2014 Basado en recuperaci\u00f3n para la precisi\u00f3n general, orientado a objetivos para cantidades espec\u00edficas de inter\u00e9s<\/li>\n<li>[ ] <strong>Ciclos de adaptaci\u00f3n planeados<\/strong> \u2014 Un ciclo rara vez es suficiente; iterar hasta que la convergencia de malla<\/li>\n<\/ul>\n<hr>\n<h2>Resumen<\/h2>\n<p>La adaptaci\u00f3n de la malla anisotr\u00f3pica es una de las t\u00e9cnicas m\u00e1s efectivas para los problemas dominados por la advecci\u00f3n. En lugar de refinar en todas partes por igual (isotr\u00f3pico), estira los elementos a lo largo de la direcci\u00f3n del flujo y se engrosa donde la soluci\u00f3n es suave. La matem\u00e1tica es sencilla: calcule el hessiano de la soluci\u00f3n, derive el tensor m\u00e9trico de sus valores propios y vectores propios, y remesh respetando la m\u00e9trica.<\/p>\n<p>Los n\u00fameros hablan por s\u00ed mismos. El tutorial STEP-30 de Deal.II muestra <strong>4120 DOFS (anisotr\u00f3pico) frente a 16,076 DOFS (isotr\u00f3pico)<\/strong> para obtener la misma precisi\u00f3n: una reducci\u00f3n de 4 \u00d7. Los informes de la literatura empujan a\u00fan m\u00e1s alto: 15 \u00d7 a 30 \u00d7 menos grados de libertad en aplicaciones de CFD 3D.<\/p>\n<p>Dos familias de estimadores sirven a diferentes prop\u00f3sitos. Los estimadores basados en la recuperaci\u00f3n (Formaggia-Perotto, Zienkiewicz-Zhu) son r\u00e1pidos y bien establecidos. Los estimadores orientados a objetivos (adjoint\/DWR) son precisos para su cantidad espec\u00edfica de inter\u00e9s, pero requieren resolver una ecuaci\u00f3n adjunta adicional. <strong>Intercambio de bordes<\/strong> Conserva la calidad de la malla cuando el estiramiento direccional degradar\u00eda la conectividad.<\/p>\n<p>El ecosistema de Python (animado\/firedrake, pragm\u00e1tico) hace que la adaptaci\u00f3n anisotr\u00f3pica sea accesible para los investigadores que escriben Python. Ya no necesita una experiencia profunda de C++ para utilizar la adaptaci\u00f3n basada en m\u00e9tricas.<\/p>\n<hr>\n<h2>Pr\u00f3ximos pasos<\/h2>\n<ol>\n<li><strong>Compruebe el n\u00famero de peclet de su problema<\/strong> \u2014 si PE &gt;&gt; 2, la adaptaci\u00f3n anisotr\u00f3pica probablemente sea beneficiosa<\/li>\n<li><strong>Ejecutar Deal.II Paso 30<\/strong> \u2014 Siga el tutorial y verifique la reducci\u00f3n de DOF usted mismo (4\u00d7 en la ecuaci\u00f3n de transporte lineal)<\/li>\n<li><strong>Pruebe Animate\/Firedrake<\/strong> \u2014 Comience con la canalizaci\u00f3n b\u00e1sica: Mesh inicial \u2192 Campo m\u00e9trico \u2192 Adaptaci\u00f3n<\/li>\n<li><strong>Comparar isotr\u00f3pico vs anisotr\u00f3pico<\/strong> \u2014 Documente la diferencia de DOF y la mejora de la precisi\u00f3n<\/li>\n<li><strong>Considere la adaptaci\u00f3n orientada a objetivos<\/strong> \u2014 Si tiene una cantidad espec\u00edfica de inter\u00e9s, resuelva el adjunto y adapte en funci\u00f3n de su mapa de sensibilidad.<\/li>\n<\/ol>\n<hr>\n<h2>Gu\u00edas relacionadas<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/advection-dominated-problems-supg-stabilization\/\" target=\"_blank\" rel=\"nofollow noopener\">Problemas dominados por la advecci\u00f3n: esquemas contra el viento y estabilizaci\u00f3n de SUPG<\/a> \u2014 T\u00e9cnicas de discretizaci\u00f3n para la misma clase de problema<\/li>\n<li><a href=\"https:\/\/matforge.org\/mesh-quality-convergence-studies-guide-2\/\" target=\"_blank\" rel=\"nofollow noopener\">Estudios de calidad y convergencia de malla: una gu\u00eda pr\u00e1ctica<\/a> \u2014 M\u00e9tricas de calidad de malla y verificaci\u00f3n de refinamiento<\/li>\n<li><a href=\"https:\/\/matforge.org\/discontinuous-galerkin-method-tutorial\/\" target=\"_blank\" rel=\"nofollow noopener\">Tutorial discontinuo del m\u00e9todo Galerkin<\/a> \u2014 DG se combina com\u00fanmente con el refinamiento anisotr\u00f3pico para los flujos dominados por advecci\u00f3n<\/li>\n<\/ul>\n<hr>\n<h2>referencias<\/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). An\u00e1lisis de error a posteriori anisotr\u00f3pico para problemas de advecci\u00f3n-difusi\u00f3n-reacci\u00f3n. computadoras y amp; estructuras.<\/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). Una d\u00e9cada de progreso en la adaptaci\u00f3n de la malla anisotr\u00f3pica para la din\u00e1mica de fluidos computacional. computadoras y amp; estructuras.<\/a><\/li>\n<li><a href=\"https:\/\/eartharxiv.org\/repository\/object\/504\/download\/1091\/\" target=\"_blank\" rel=\"nofollow noopener\">Muralla, A. (2019). Estimaci\u00f3n de errores orientado a objetivos y adaptaci\u00f3n de malla para 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 Paso-30 Tutorial.<\/a><\/li>\n<li><a href=\"https:\/\/mesh-adaptation.github.io\/\" target=\"_blank\" rel=\"nofollow noopener\">Documentaci\u00f3n de animaci\u00f3n\/Firedrake.<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/meshadaptation\/pragmatic\" target=\"_blank\" rel=\"nofollow noopener\">pragm\u00e1tico (backend de adaptaci\u00f3n de malla).<\/a><\/li>\n<li><a href=\"https:\/\/www.mate.polimi.it\/biblioteca\/add\/qmox\/35-2025.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Informe T\u00e9cnico Polimi (35-2025). Estimadores de errores basados en recuperaci\u00f3n anisotr\u00f3pica y adaptaci\u00f3n de malla.<\/a><\/li>\n<li><a href=\"https:\/\/mmgtools.org\/tutorials\/tutorials_mmg2d_mesh_adaptation.html\" target=\"_blank\" rel=\"nofollow noopener\">Tutorial de adaptaci\u00f3n 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>Aprenda por qu\u00e9 la adaptaci\u00f3n de malla anisotr\u00f3pica reduce los grados de libertad en 4\u201330\u00d7 para los flujos dominados por advecci\u00f3n. Cubre tensores de m\u00e9tricas, estimadores de errores e implementaci\u00f3n pr\u00e1ctica.<\/p>\n","protected":false,"raw":"Aprenda por qu\u00e9 la adaptaci\u00f3n de malla anisotr\u00f3pica reduce los grados de libertad en 4\u201330\u00d7 para los flujos dominados por advecci\u00f3n. Cubre tensores de m\u00e9tricas, estimadores de errores e implementaci\u00f3n pr\u00e1ctica."},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"es_ES","_original_post":"https:\/\/matforge.org\/?p=534","iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[26,57,55,54,56],"class_list":["post-778","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","es-ES"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n - 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\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  16 minutesAprenda por qu\u00e9 la adaptaci\u00f3n de malla anisotr\u00f3pica reduce los grados de libertad en 4\u201330\u00d7 para los flujos dominados por advecci\u00f3n. Cubre tensores de m\u00e9tricas, estimadores de errores e implementaci\u00f3n pr\u00e1ctica.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-30T12:21: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=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomas Delgado\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"26 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/\"},\"author\":{\"name\":\"Tomas Delgado\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"headline\":\"Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n\",\"datePublished\":\"2026-07-30T12:21:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/\"},\"wordCount\":5186,\"commentCount\":0,\"keywords\":[\"advecci\u00f3n\",\"Refinamiento anisotr\u00f3pico\",\"finite elements\",\"Firedrake\",\"mesh adaptation\"],\"articleSection\":[\"Simulaci\u00f3n &amp; Proyectos de modelado\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/es\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/\",\"name\":\"Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-07-30T12:21:42+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/anisotropic-mesh-adaptation-advection-dominated-flows\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n\"}]},{\"@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\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\",\"name\":\"Tomas Delgado\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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":"Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n - 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\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/","og_locale":"es_ES","og_type":"article","og_title":"Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n - matforge.org","og_description":"Reading Time:  16 minutesAprenda por qu\u00e9 la adaptaci\u00f3n de malla anisotr\u00f3pica reduce los grados de libertad en 4\u201330\u00d7 para los flujos dominados por advecci\u00f3n. Cubre tensores de m\u00e9tricas, estimadores de errores e implementaci\u00f3n pr\u00e1ctica.","og_url":"https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/","og_site_name":"matforge.org","article_published_time":"2026-07-30T12:21:42+00:00","author":"Tomas Delgado","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Tomas Delgado","Tiempo de lectura":"26 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/"},"author":{"name":"Tomas Delgado","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"headline":"Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n","datePublished":"2026-07-30T12:21:42+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/"},"wordCount":5186,"commentCount":0,"keywords":["advecci\u00f3n","Refinamiento anisotr\u00f3pico","finite elements","Firedrake","mesh adaptation"],"articleSection":["Simulaci\u00f3n &amp; Proyectos de modelado"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/","url":"https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/","name":"Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-07-30T12:21:42+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"breadcrumb":{"@id":"https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/es\/anisotropic-mesh-adaptation-advection-dominated-flows\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/es\/"},{"@type":"ListItem","position":2,"name":"Adaptaci\u00f3n de malla anisotr\u00f3pica para flujos dominados por advecci\u00f3n"}]},{"@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":"es"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061","name":"Tomas Delgado","image":{"@type":"ImageObject","inLanguage":"es","@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\/778","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=778"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/778\/revisions"}],"predecessor-version":[{"id":946,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/778\/revisions\/946"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=778"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=778"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=778"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}