{"id":607,"date":"2026-07-22T08:16:54","date_gmt":"2026-07-22T08:16:54","guid":{"rendered":"https:\/\/matforge.org\/?p=607","raw":"https:\/\/matforge.org\/?p=607"},"modified":"2026-07-22T08:16:54","modified_gmt":"2026-07-22T08:16:54","slug":"adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena","status":"publish","type":"post","link":"https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/","title":{"rendered":"Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos","raw":"Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos"},"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\"> 12<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>Fipy no tiene refinamiento de malla adaptable incorporado (AMR). Los enfoques actuales involucran la generaci\u00f3n de mallas externas con GMSH (ineficiente para problemas din\u00e1micos), integraci\u00f3n con bibliotecas AMR dedicadas como LibMesh (desafiante arquitect\u00f3nica) o cambiar a c\u00f3digos de campo de fase alternativos que admiten AMR de forma nativa (Moose, Prisms-PF). AMR proporciona aceleraciones significativas (a menudo de 2 a 10 \u00d7) para problemas de campo de fase con interfaces localizadas, pero introduce complejidad algor\u00edtmica y puede que no valga la pena cuando se necesita una alta resoluci\u00f3n en todas partes. Si su simulaci\u00f3n Fipy tiene problemas con la memoria o el rendimiento debido a las mallas uniformes, primero optimice su malla est\u00e1tica, considere una resoluci\u00f3n global m\u00e1s gruesa con solucionadores m\u00e1s ajustados y solo busque AMR si su problema tiene una peque\u00f1a regi\u00f3n de inter\u00e9s clara (por ejemplo, una interfaz en movimiento) y est\u00e1 dispuesto a implementar personalizado Infraestructura de gesti\u00f3n de mallas.<\/p>\n<h2>Introducci\u00f3n: el dilema de la resoluci\u00f3n de malla<\/h2>\n<p>Las simulaciones de campo de fase a menudo involucran fen\u00f3menos complejos en evoluci\u00f3n: crecimiento de dendritas en la solidificaci\u00f3n, separaci\u00f3n de fase en aleaciones o interfaces electrodo-electrolitos en bater\u00edas. Estas simulaciones generalmente requieren alta resoluci\u00f3n espacial cerca de interfaces donde los gradientes son pronunciados, mientras que las mallas m\u00e1s gruesas son suficientes lejos de estas regiones. Una malla uniforme que es lo suficientemente fina como para resolver la interfaz en todas partes desperdicia recursos inform\u00e1ticos en \u00e1reas poco interesantes, lo que genera un uso excesivo de memoria y tiempos de ejecuci\u00f3n m\u00e1s lentos.<\/p>\n<p>El refinamiento de malla adaptativa (AMR) resuelve esto ajustando din\u00e1micamente la resoluci\u00f3n de la malla durante una simulaci\u00f3n, refinando las celdas donde la soluci\u00f3n cambia r\u00e1pidamente y se endurece donde es suave. Para los problemas de campo de fase, donde la interfaz ocupa una peque\u00f1a fracci\u00f3n del dominio, AMR puede reducir el recuento de celdas en un orden de magnitud o m\u00e1s, lo que permite simulaciones m\u00e1s grandes o una respuesta m\u00e1s r\u00e1pida en las estaciones de trabajo de escritorio.<\/p>\n<p>Pero si est\u00e1 utilizando Fipy, descubrir\u00e1 r\u00e1pidamente una dura verdad: <strong>Fipy no es compatible con AMR de forma nativa<\/strong>. Esto no siempre estuvo claro en la documentaci\u00f3n, por lo que muchos usuarios invierten tiempo explorando callejones sin salida antes de llegar a la misma conclusi\u00f3n que alcanzaron los desarrolladores de Fipy Core: el desajuste arquitect\u00f3nico entre el marco de volumen finito de Fipy y las bibliotecas tradicionales de AMR es sustancial.<\/p>\n<p>Esta gu\u00eda atraviesa la incertidumbre. Examinaremos lo que AMR podr\u00eda significar para sus simulaciones FIPY, revisaremos el estado actual del soporte de AMR, evaluaremos las soluciones pr\u00e1cticas y proporcionaremos un marco de decisi\u00f3n para ayudarlo a elegir el camino correcto a seguir.<\/p>\n<h2>\u00bfQu\u00e9 es el refinamiento de malla adaptativa (AMR)?<\/h2>\n<p>Antes de sumergirnos en detalles finos, establezcamos un modelo mental claro de c\u00f3mo funciona AMR y por qu\u00e9 es valioso.<\/p>\n<h3>La idea central<\/h3>\n<p>En una malla est\u00e1tica, eliges una resoluci\u00f3n \u00fanica (tama\u00f1o de celda) que debe satisfacer la parte m\u00e1s exigente de tu dominio en todas partes. Si necesita un espaciado de 10 nm para resolver una punta dendrita pero el dominio tiene 1 mm de ancho, una malla uniforme requerir\u00eda 100 000 celdas en cada dimensi\u00f3n, claramente no factible.<\/p>\n<p>AMR comienza con una malla de base gruesa e introduce parches m\u00e1s finas solo donde sea necesario. Los criterios de refinamiento suelen incluir:<\/p>\n<ul>\n<li><strong>Umbral de gradiente<\/strong>: refinar d\u00f3nde |\u2207\u03c6| Supera un valor (para par\u00e1metros de orden de campo de fase)<\/li>\n<li><strong>Estimadores de error<\/strong>: utilice indicadores de error basados en soluciones o en residuos<\/li>\n<li><strong>Seguimiento de funciones<\/strong>: siga las interfaces o estructuras conocidas<\/li>\n<\/ul>\n<p>La malla se adapta peri\u00f3dicamente (cada n pasos de tiempo o cuando se activan ciertos criterios), requiriendo:<\/p>\n<ol>\n<li><strong>Algoritmos de divisi\u00f3n de celdas\/engrosamiento<\/strong><\/li>\n<li><strong>Interpolaci\u00f3n de datos<\/strong> para transferir campos de soluci\u00f3n de mallas antiguas a nuevas<\/li>\n<li><strong>Equilibrio de carga<\/strong> para simulaciones en paralelo<\/li>\n<li><strong>Ejecuci\u00f3n de la conservaci\u00f3n<\/strong> a trav\u00e9s de l\u00edmites groseros y finos<\/li>\n<\/ol>\n<h3>Malla est\u00e1tica vs est\u00e1tica: una comparaci\u00f3n cuantitativa<\/h3>\n<p>Un estudio de 2021 en <em>computadoras &amp; Las matem\u00e1ticas con aplicaciones<\/em> analiz\u00f3 el rendimiento de AMR para varios problemas de PDE y descubri\u00f3 que AMR redujo el consumo de memoria en un 60 a 80 % y el tiempo de reloj de pared en un 40 a 70 % en comparaci\u00f3n con las mallas uniformes refinadas con el mismo umbral de precisi\u00f3n, incluso despu\u00e9s de tener en cuenta la sobrecarga de AMR.<\/p>\n<p>Sin embargo, el mismo estudio se\u00f1al\u00f3 que para problemas en los que se necesita una alta resoluci\u00f3n en casi todas partes (p. ej., descomposici\u00f3n espinodal en etapa temprana con fluctuaciones de composici\u00f3n uniforme), AMR ofreci\u00f3 un beneficio m\u00ednimo y, a veces, debido a los gastos generales de manejo.<\/p>\n<h2>El estado de AMR en Fipy: realidad actual<\/h2>\n<h3>Posici\u00f3n oficial del equipo Fipy<\/h3>\n<p>La fuente m\u00e1s autorizada sobre FIPY AMR es el n\u00famero 618 de GitHub, inaugurado en febrero de 2019. La discusi\u00f3n revela la postura del proyecto:<\/p>\n<blockquote>\n<p><strong>GUYER<\/strong> (mantenedor de Fipy): \u00abHemos hecho intentos ocasionales en esto, pero nada fruct\u00edfero. El uso de GMSH para regenerar la malla y luego reinterpolar los datos es irremediablemente ineficiente (lo he hecho por problemas cuasi est\u00e1ticos). De forma adecuada, Fipy deber\u00eda integrarse con LibMesh o alg\u00fan otro Mesher adaptativo dedicado; me gustar\u00eda que esto sucediera, pero hasta ahora, las arquitecturas fundamentales de Fipy y los Mesers que he visto son demasiado diferentes\u00bb.<\/p>\n<\/blockquote>\n<p>Esta no es una caracter\u00edstica de \u00abtal vez alg\u00fan d\u00eda\u00bb: es un reconocimiento de que el dise\u00f1o de Fipy y los requisitos de AMR eficiente est\u00e1n fundamentalmente desalineados. La arquitectura Fipy, construida sobre una sencilla discretizaci\u00f3n de volumen finito con mallas estructuradas o no estructuradas representadas en la memoria como cuadr\u00edculas fijas, no se adapta a los cambios de topolog\u00eda din\u00e1mica que requiere AMR sin una reestructuraci\u00f3n significativa.<\/p>\n<h3>Por qu\u00e9 la integraci\u00f3n es dif\u00edcil<\/h3>\n<p>La abstracci\u00f3n de malla de Fipy (<code>Grid2D<\/code>, <code>Grid3D<\/code>, <code>Gmsh2D<\/code>, <code>Gmsh3D<\/code>, etc.) asume una topolog\u00eda est\u00e1tica. Las celdas, las caras y su conectividad se establecen en el inicio de la simulaci\u00f3n y persisten en todo momento. AMR requiere:<\/p>\n<ul>\n<li><strong>Conectividad din\u00e1mica<\/strong>: cuando una celda se divide, aparecen nuevas celdas, se cambian los vecinos y se redefinen las relaciones cara a celda.<\/li>\n<li><strong>Migraci\u00f3n de datos<\/strong>: las variables de soluci\u00f3n deben interpolarse de las celdas antiguas a las nuevas, preservando las propiedades de conservaci\u00f3n.<\/li>\n<li><strong>Rec\u00f3mputo del solucionador<\/strong>: la estructura de matriz escasa cambia a medida que cambia el n\u00famero de celdas, lo que requiere reasignaci\u00f3n de matriz y reconstrucci\u00f3n de preacondicionador.<\/li>\n<li><strong>Redistribuci\u00f3n paralela<\/strong>: en simulaciones MPI, las c\u00e9lulas refinadas crean desequilibrio de carga; Los procesadores necesitan intercambiar regiones fantasma.<\/li>\n<\/ul>\n<p>Ninguno de estos es compatible con el marco actual de Fipy. Intentar implementarlos esencialmente significar\u00eda reescribir grandes porciones de FIPY.<\/p>\n<h2>Enfoques pr\u00e1cticos (y sus compensaciones)<\/h2>\n<p>Dada la falta de apoyo nativo, \u00bfcu\u00e1les son sus opciones si necesita un comportamiento similar al de AMR con Fipy? Estos son los caminos que los usuarios han explorado, clasificados de la m\u00e1s a la menos pr\u00e1ctica.<\/p>\n<h3>1. Utilice un c\u00f3digo de campo de fase alternativo con AMR<\/h3>\n<p><strong>Verdicto<\/strong>: Recomendado si AMR es esencial y est\u00e1s iniciando un nuevo proyecto.<\/p>\n<p>Varios c\u00f3digos de campo de fase de c\u00f3digo abierto admiten AMR de forma nativa:<\/p>\n<ul>\n<li><strong>Moose<\/strong> (Entorno de simulaci\u00f3n orientado a objetos multif\u00edsico): utiliza libmesh para el enlazado adaptativo, admite AMR paralelo con equilibrio de carga e incluye m\u00f3dulos de campo de fase.<\/li>\n<li><strong>prisms-pf<\/strong>: Basado en Deal.ii, ofrece AMR escalable para problemas de campo de fase con criterios de refinamiento sofisticados.<\/li>\n<li><strong>OpenPhase<\/strong>: admite AMR basado en c\u00e9lulas para la evoluci\u00f3n de la microestructura.<\/li>\n<\/ul>\n<p>Estos c\u00f3digos est\u00e1n listos para la producci\u00f3n, est\u00e1n bien documentados y tienen comunidades activas. La compensaci\u00f3n es una curva de aprendizaje m\u00e1s pronunciada si ya est\u00e1 invertido en la API y el ecosistema de Python de Fipy.<\/p>\n<p><strong>Cu\u00e1ndo elegir esto<\/strong>: est\u00e1 iniciando un nuevo proyecto de simulaci\u00f3n donde AMR es un requisito dif\u00edcil (dominio grande, interfaz localizada, recursos de computaci\u00f3n limitados) y puede permitirse el lujo de aprender un nuevo marco.<\/p>\n<p><strong>Enlace interno<\/strong>: para obtener una descripci\u00f3n general de los conceptos de modelado de campo de fase, consulte nuestra gu\u00eda <a href=\"\/understanding-phase-field-models-in-materials-science\/\">Comprensi\u00f3n de modelos de campo de fase en ciencia de materiales<\/a>.<\/p>\n<h3>2. Pre-computar varias mallas est\u00e1ticas y cambiar entre ellas<\/h3>\n<p><strong>Verdicto<\/strong>: Semipr\u00e1ctico para problemas con patrones de refinamiento predecibles.<\/p>\n<p>Si su simulaci\u00f3n tiene una trayectoria conocida (por ejemplo, una dendrita que crece en una direcci\u00f3n), puede crear una serie de mallas con zonas de refinamiento colocadas manualmente con GMSH. En los pasos de tiempo predefinidos, usted:<\/p>\n<ol>\n<li>Detener la simulaci\u00f3n<\/li>\n<li>Interpolar campos desde la malla antigua hasta la nueva malla<\/li>\n<li>Reiniciar con la nueva malla<\/li>\n<\/ol>\n<p><strong>Desaf\u00edos<\/strong>:<\/p>\n<ul>\n<li>Fipy no tiene conmutaci\u00f3n de malla incorporada. Tendr\u00eda que exportar campos centrados en celdas, crear un nuevo objeto <code>Mesh<\/code>, interpolar manualmente y reinicializar solucionadores.<\/li>\n<li>La interpolaci\u00f3n debe preservar la conservaci\u00f3n: la interpolaci\u00f3n lineal simple no ser\u00e1 suficiente para los m\u00e9todos de volumen finito conservador de flujo.<\/li>\n<li>El proceso es manual y propenso a errores; No es adecuado para la adaptaci\u00f3n din\u00e1mica basada en gradientes de soluci\u00f3n.<\/li>\n<\/ul>\n<p><strong>Cu\u00e1ndo elegir esto<\/strong>: su patr\u00f3n de refinamiento es espacialmente predecible (por ejemplo, un frente en movimiento que se mantiene dentro de una regi\u00f3n delimitadora conocida) y puede tolerar paradas ocasionales e intervenci\u00f3n manual.<\/p>\n<p><strong>Advertencia de trampa<\/strong>: la mala interpolaci\u00f3n en las interfaces finas y gruesas puede introducir p\u00e9rdidas de precisi\u00f3n de primer orden o oscilaciones no f\u00edsicas.<\/p>\n<h3>3. Integraci\u00f3n de la Biblioteca AMR Externa (LibMesh, Paramesh)<\/h3>\n<p><strong>Veredicto<\/strong>: nivel de investigaci\u00f3n; No est\u00e1 listo para la producci\u00f3n.<\/p>\n<p>El mantenedor de Fipy mencion\u00f3 libmesh como un objetivo de integraci\u00f3n potencial. LibMesh proporciona un marco de volumen finito\/volumen finito con AMR, utilizado por Moose y otros. Sin embargo, la integraci\u00f3n de Fipy con libmesh requerir\u00eda:<\/p>\n<ul>\n<li>Reescribiendo la discretizaci\u00f3n de Fipy para utilizar el sistema de malla y ensamblaje de LibMesh<\/li>\n<li>Transferir la ecuaci\u00f3n existente de Fipy y la infraestructura del solucionador<\/li>\n<li>Abordando las diferencias fundamentales: Fipy es un volumen finito, libmesh es principalmente un elemento finito<\/li>\n<\/ul>\n<p>Existen desaf\u00edos similares con Paramesh (una biblioteca AMR estructurada en bloques en Fortran). El desajuste arquitect\u00f3nico significa que la integraci\u00f3n no es una cuesti\u00f3n de \u00abenchufe\u00bb AMR, es un gran esfuerzo de ingenier\u00eda.<\/p>\n<p><strong>Cu\u00e1ndo considerar esto<\/strong>: es un desarrollador que planea contribuir a Fipy Core o mantener una bifurcaci\u00f3n a largo plazo con soporte de AMR. No recomendado para usuarios finales.<\/p>\n<h3>4. Acepta la limitaci\u00f3n: optimiza tu malla est\u00e1tica<\/h3>\n<p><strong>Verdicto<\/strong>: el valor predeterminado pragm\u00e1tico para la mayor\u00eda de los usuarios de Fipy.<\/p>\n<p>Antes de seguir AMR, pregunte: \u00bfPuedo lograr un rendimiento aceptable con una malla est\u00e1tica bien dise\u00f1ada? A menudo, la respuesta es s\u00ed si:<\/p>\n<ul>\n<li><strong>Utilice mallas graduadas<\/strong>: refinar manualmente las interfaces cercanas con transiciones suaves (no saltos de relaci\u00f3n de aspecto grandes)<\/li>\n<li><strong>Emplear las funciones de densidad de malla local<\/strong>: en GMSH, defina campos de tama\u00f1o de malla que concentren las celdas donde sea necesario<\/li>\n<li><strong>Opciones de Solucionador de Fipy de apalancamiento<\/strong>: utilice preacondicionadores eficientes (por ejemplo, <code>ScipyKrylov<\/code> con <code>ilu<\/code> preacondicionamiento) y paso de tiempo apropiado<\/li>\n<li><strong>Reducir el refinamiento innecesario<\/strong>: muchos usuarios refinan \u00absolo para estar seguros\u00bb. Los estudios de convergencia a menudo revelan que las mallas m\u00e1s gruesas son suficientes para resultados cualitativos.<\/li>\n<\/ul>\n<p>Por ejemplo, una simulaci\u00f3n de dendrita de campo de fase podr\u00eda necesitar celdas finas solo dentro de unos pocos anchos de interfaz del frente s\u00f3lido-l\u00edquido. Una malla est\u00e1tica con clasificaci\u00f3n manual puede capturar esto con el 10-20% de las celdas de una malla fina uniforme, aunque sin la adaptabilidad para rastrear un frente en movimiento. Si el frente se mueve lentamente en relaci\u00f3n con el tiempo de c\u00e1lculo, puede aceptar que algunas regiones se subdividen a medida que avanza la simulaci\u00f3n, o simplemente comenzar con una malla lo suficientemente fina como para cubrir toda la trayectoria esperada.<\/p>\n<p><strong>Cu\u00e1ndo elegir esto<\/strong>: su dominio de simulaci\u00f3n no es enorme, su regi\u00f3n de interfaz es una fracci\u00f3n manejable del dominio o puede tolerar alguna ineficiencia para la simplicidad del c\u00f3digo.<\/p>\n<h3>5. Implementar una capa AMR personalizada<\/h3>\n<p><strong>Verdicto<\/strong>: solo usuarios avanzados; alto riesgo.<\/p>\n<p>En teor\u00eda, podr\u00edas construir AMR sobre Fipy al:<\/p>\n<ol>\n<li>Mantener un mapeo desde los \u00edndices de celda de Fipy a una estructura de malla jer\u00e1rquica<\/li>\n<li>Construyendo peri\u00f3dicamente un nuevo <code>Grid2D<\/code>\/<code>Grid3D<\/code> con celdas refinadas<\/li>\n<li>Variables de soluci\u00f3n de interpolaci\u00f3n usando los m\u00e9todos de Fipy <code>cellVariable<\/code><\/li>\n<li>Reconstrucci\u00f3n del sistema lineal<\/li>\n<\/ol>\n<p>Este enfoque enfrenta severos obst\u00e1culos:<\/p>\n<ul>\n<li>Los objetos <code>Mesh<\/code> de Fipy no est\u00e1n dise\u00f1ados para la modificaci\u00f3n de simulaci\u00f3n en el medio<\/li>\n<li>Las estructuras de datos <code>CellVariable<\/code> est\u00e1n estrechamente acopladas a la malla original de indexaci\u00f3n<\/li>\n<li>Reconstruir el sistema de ecuaciones (<code>TransientTerm<\/code>, <code>DiffusionTerm<\/code>, etc.) La simulaci\u00f3n intermedia es compleja<\/li>\n<li>No hay garant\u00edas de conservaci\u00f3n en los pasos de refinamiento<\/li>\n<\/ul>\n<p>Algunos investigadores han intentado variantes de esto, pero no existe una implementaci\u00f3n de c\u00f3digo abierto que funcione.<\/p>\n<p><strong>Cu\u00e1ndo considerar esto<\/strong>: tiene requisitos de investigaci\u00f3n espec\u00edficos que exigen que FIPY, AMR sea cr\u00edtico y est\u00e9 preparado para invertir meses en desarrollo y validaci\u00f3n. No se recomienda para uso rutinario.<\/p>\n<h2>Marco de decisi\u00f3n: \u00bfDebe buscar AMR con Fipy?<\/h2>\n<p>Utilice este diagrama de flujo para determinar su ruta:<\/p>\n<pre><code>Do you need AMR? (Is your problem large + interface-localized?)\n\u2502\n\u251c\u2500 No \u2192 Optimize static mesh (Section 4)\n\u2502\n\u2514\u2500 Yes \u2192 Can you switch to a phase-field code with AMR?\n\u2502\n\u251c\u2500 Yes \u2192 Use MOOSE\/PRISMS-PF\/OpenPhase\n\u2502\n\u2514\u2500 No \u2192 Are you willing to build custom AMR infrastructure?\n\u2502\n\u251c\u2500 Yes \u2192 Research-level implementation (Section 5)\n\u2502\n\u2514\u2500 No \u2192 Accept that FiPy cannot do AMR;\neither live with static mesh inefficiency\nor change your problem scope.<\/code><\/pre>\n<h3>Preguntas clave para responder<\/h3>\n<ol>\n<li><strong>\u00bfQu\u00e9 porcentaje de su dominio necesita una buena resoluci\u00f3n?<\/strong><br \/> &#8211; &lt; 20%: AMR podr\u00eda proporcionar una aceleraci\u00f3n de 3 a 10 \u00d7 si est\u00e1 disponible<br \/> &#8211; &gt; 50%: el beneficio de AMR disminuye; La malla est\u00e1tica puede ser m\u00e1s simple y r\u00e1pida<\/li>\n<li><strong>\u00bfSu interfaz se mueve significativamente durante la simulaci\u00f3n?<\/strong><br \/> &#8211; S\u00ed: el seguimiento de AMR se vuelve valioso; De lo contrario, la malla graduada est\u00e1tica debe cubrir toda la trayectoria posible<br \/> &#8211; No: una sola malla graduada est\u00e1tica es suficiente<\/li>\n<li><strong>\u00bfTiene recursos para desarrolladores para crear soporte de AMR?<\/strong><br \/> &#8211; S\u00ed: podr\u00eda contribuir a FIPY o mantener una bifurcaci\u00f3n (alto costo a largo plazo)<br \/> &#8211; No: Elija c\u00f3digo alternativo o malla est\u00e1tica<\/li>\n<li><strong>\u00bfEs la escalabilidad paralela cr\u00edtica?<\/strong><br \/> &#8211; AMR presenta desaf\u00edos de equilibrio de carga; Las mallas est\u00e1ticas paralelizan m\u00e1s de manera predecible<br \/>: si necesita cientos de n\u00facleos, las bibliotecas AMR como Moose manejan esto mejor de lo que podr\u00eda cualquier truco.<\/li>\n<\/ol>\n<h2>Trampas comunes y conceptos err\u00f3neos<\/h2>\n<p>Incluso si persigue AMR a trav\u00e9s de c\u00f3digos alternativos, tenga cuidado con estos problemas:<\/p>\n<h3>Escolar 1: Sobre-refinamiento<\/h3>\n<p>Establecer criterios de refinamiento demasiado agresivos conduce a la creaci\u00f3n excesiva de celdas, negando los beneficios de AMR y posiblemente excediendo los l\u00edmites de memoria. La Gu\u00eda de pr\u00e1cticas recomendadas de campo de fase NIST aconseja: \u00abLimite los niveles de refinamiento\u00bb y \u00abUtilice la restricci\u00f3n de vecindario adecuada (no m\u00e1s de una diferencia de nivel de refinamiento entre las celdas adyacentes)\u00bb.<\/p>\n<p><strong>Recomendaci\u00f3n<\/strong>: Comience con umbrales conservadores (p. ej., refine solo donde |\u2207\u03c6| &gt; 0,05\/\u0394x) y controle el crecimiento del recuento de c\u00e9lulas.<\/p>\n<h3>Escolar 2: mala interpolaci\u00f3n en los l\u00edmites gruesos y finos<\/h3>\n<p>Cuando los datos se mueven entre mallas de diferentes niveles de refinamiento, se producen errores de conservaci\u00f3n y p\u00e9rdida de precisi\u00f3n. La convergencia de primer orden en estas interfaces puede dominar el error global.<\/p>\n<p><strong>Recomendaci\u00f3n<\/strong>: utilizar esquemas de interpolaci\u00f3n conservadores; En los m\u00e9todos de volumen finito, asegure la coincidencia de flujo entre las interfaces de refinamiento. Bibliotecas como libmesh manejan esto internamente: evite la interpolaci\u00f3n de bricolaje a menos que sea un experto.<\/p>\n<h3>Escollo 3: charla de malla<\/h3>\n<p>El refinamiento continuo\/endurecimiento entre pasos de tiempo adyacentes (por ejemplo, cuando una interfaz oscila alrededor de un l\u00edmite de celda) causa inestabilidad y c\u00e1lculo desperdiciado.<\/p>\n<p><strong>Recomendaci\u00f3n<\/strong>: Implemente la hist\u00e9resis: requiera que una celda se mantenga por encima\/por debajo del umbral de refinamiento durante varios pasos antes de cambiar de nivel.<\/p>\n<h3>Escolar 4: Ignorar el equilibrio de carga en carreras paralelas<\/h3>\n<p>El refinamiento din\u00e1mico crea una distribuci\u00f3n celular desigual en los rangos MPI. Algunos procesadores se inundan con celdas refinadas, mientras que otros est\u00e1n inactivos.<\/p>\n<p><strong>Recomendaci\u00f3n<\/strong>: use bibliotecas con equilibrio de carga incorporado (alce, prisms-pf). Si se implementa a s\u00ed mismo, vuelva a particionar peri\u00f3dicamente la malla utilizando curvas de relleno de espacio o partici\u00f3n de gr\u00e1ficos.<\/p>\n<h2>Expectativas de rendimiento: \u00bfQu\u00e9 puedes ganar de manera realista?<\/h2>\n<p>Basado en puntos de referencia publicados:<\/p>\n<ul>\n<li><strong>PFHub Benchmark 3<\/strong> (Crecimiento dendr\u00edtica): alces y prismas-PF con AMR lograron los tiempos de ejecuci\u00f3n m\u00e1s r\u00e1pidos, utilizando \u00f3rdenes de magnitud menos celdas que las mallas uniformes.<\/li>\n<li><strong>CFD general\/campo de fase<\/strong>: la AMR normalmente reduce el recuento de c\u00e9lulas en un 60 a 80% y el tiempo de pared en un 40 a 70% frente a mallas uniformes con una precisi\u00f3n equivalente.<\/li>\n<li><strong>Overhead<\/strong>: AMR agrega una sobrecarga de tiempo de ejecuci\u00f3n del 5 al 15 % para la gesti\u00f3n de mallas y la interpolaci\u00f3n; Esto se amortiza por el recuento de c\u00e9lulas reducido.<\/li>\n<\/ul>\n<p><strong>Pero nota<\/strong>: estos n\u00fameros provienen de c\u00f3digos que tienen AMR profundamente integrado. Un bucle FIPY+GMSH de Kludgy probablemente ser\u00eda m\u00e1s lento que una malla est\u00e1tica debido a la generaci\u00f3n de malla repetida y los costos de interpolaci\u00f3n.<\/p>\n<h2>Paso a paso: qu\u00e9 hacer en su lugar<\/h2>\n<p>Si est\u00e1 bloqueado por la limitaci\u00f3n de AMR de Fipy, aqu\u00ed hay un plan de acci\u00f3n pr\u00e1ctico:<\/p>\n<h3>Paso 1: Optimice su malla est\u00e1tica actual<\/h3>\n<ol>\n<li><strong>Realice un estudio de convergencia de malla<\/strong>: encuentre la malla m\u00e1s gruesa que proporcione resultados aceptables. Muchos usuarios refinan.<\/li>\n<li><strong>Utilice mallas graduadas<\/strong>: en GMSH, defina un campo <code>MeshSize<\/code> que var\u00eda con la distancia de su regi\u00f3n de inter\u00e9s.<\/li>\n<li><strong>Habilitar solucionadores eficientes<\/strong>: use <code>ScipyKrylov<\/code> (GMRES) con <code>ilu<\/code> preacondicionamiento en lugar de opciones de PETSC predeterminadas si su problema es de tama\u00f1o moderado.<\/li>\n<li><strong>Considere el paso del tiempo<\/strong>: los pasos de tiempo m\u00e1s grandes con solucionadores impl\u00edcitos pueden compensar las mallas m\u00e1s gruesas.<\/li>\n<\/ol>\n<h3>Paso 2: evaluar c\u00f3digos alternativos<\/h3>\n<p>Si las mallas est\u00e1ticas a\u00fan no lo cortan:<\/p>\n<ul>\n<li><strong>Moose<\/strong>: <a href=\"https:\/\/mooseframework.inl.gov\/\">https:\/\/mooseframework.inl.gov\/<\/a> \u2013 Multif\u00edsica completa con AMR, curva de aprendizaje m\u00e1s pronunciada pero potente.<\/li>\n<li><strong>prisms-pf<\/strong>: <a href=\"https:\/\/github.com\/prisms-center\/phaseField\">https:\/\/github.com\/prisms-center\/phasefield<\/a> \u2013 enfocado en el campo de fase, basado en deal.ii, excelente AMR.<\/li>\n<li><strong>OpenPhase<\/strong>: <a href=\"https:\/\/github.com\/openphase\/openphase\">https:\/\/github.com\/openphase\/openphase<\/a> \u2013 espec\u00edficamente para la microestructura.<\/li>\n<\/ul>\n<p>Ejecute un peque\u00f1o punto de referencia (por ejemplo, una descomposici\u00f3n espinodal 2D) para medir el rendimiento y el esfuerzo de portabilidad.<\/p>\n<h3>Paso 3: Si debes quedarte con Fipy y necesitas AMR<\/h3>\n<p>Vuelva a evaluar la formulaci\u00f3n de su problema:<\/p>\n<ul>\n<li>\u00bfPuedes reducir el tama\u00f1o del dominio? Los dominios m\u00e1s peque\u00f1os necesitan menos refinamiento.<\/li>\n<li>\u00bfPuedes usar simetr\u00eda? Los modelos de cuartos de dominio cortan los recuentos de c\u00e9lulas de forma espectacular.<\/li>\n<li>\u00bfPuedes aceptar resultados menos precisos? A veces, el comportamiento cualitativo es suficiente para la investigaci\u00f3n en etapa inicial.<\/li>\n<\/ul>\n<p>Si ninguno de estos funciona, ha llegado al techo de Fipy para este problema. Considere contribuir al desarrollo de Fipy AMR (consulte el problema #618) o las herramientas de conmutaci\u00f3n.<\/p>\n<h2>Conclusi\u00f3n y recomendaciones<\/h2>\n<p>El refinamiento de malla adaptativa es una poderosa t\u00e9cnica para simulaciones de campo de fase con interfaces localizadas, que ofrece ganancias de rendimiento sustanciales cuando se implementan correctamente. Sin embargo, <strong>fipy no es compatible con AMR<\/strong>, y las brechas arquitect\u00f3nicas significan que es poco probable que el soporte nativo sea a corto plazo.<\/p>\n<p><strong>Nuestras recomendaciones<\/strong>:<\/p>\n<ol>\n<li><strong>Para la mayor\u00eda de los usuarios de Fipy<\/strong>: optimice su malla est\u00e1tica con dimensionamiento graduado y solucionadores eficientes. Esto resuelve el 80% de los problemas de rendimiento sin dejar el c\u00f3modo entorno de Python de Fipy.<\/li>\n<li><strong>Para nuevos proyectos con exigencias estrictas de AMR<\/strong>: elija Moose o Prisms-PF. El tiempo invertido en aprender estos marcos vale la pena en escalabilidad y acceso a funciones avanzadas como AMR, solucionadores no lineales y acoplamiento multif\u00edsico.<\/li>\n<li><strong>Para los investigadores que impulsan los l\u00edmites del campo de fase<\/strong>: Considere contribuir al desarrollo de FIPY o mantener una bifurcaci\u00f3n con el apoyo de AMR, pero prep\u00e1rese para un compromiso de varios a\u00f1os.<\/li>\n<\/ol>\n<p>Recuerde: el mejor c\u00f3digo de simulaci\u00f3n es el que puede usar de manera efectiva. Una implementaci\u00f3n de AMR \u00abperfecta\u00bb que no puede trabajar es peor que una malla est\u00e1tica \u00ablimitada\u00bb que produce resultados confiables a tiempo.<\/p>\n<h2>Gu\u00edas relacionadas<\/h2>\n<ul>\n<li><a href=\"\/using-fipy-for-phase-field-modeling\/\">Uso de Fipy para el modelado de campo de fase<\/a><\/li>\n<li><a href=\"\/understanding-phase-field-models-in-materials-science\/\">Comprender los modelos de campo de fase en la ciencia de los materiales<\/a><\/li>\n<li><a href=\"\/solving-diffusion-equations-with-fipy\/\">Resolviendo ecuaciones de difusi\u00f3n con Fipy<\/a><\/li>\n<li><a href=\"\/boundary-conditions-theory-and-implementation-in-fipy\/\">Condiciones de contorno: teor\u00eda e implementaci\u00f3n en Fipy<\/a><\/li>\n<li><a href=\"\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Gesti\u00f3n de problemas de PDE a gran escala: estrategias y estudios de casos de HPC<\/a><\/li>\n<li><a href=\"\/reading-and-understanding-fipy-documentation\/\">Lectura y comprensi\u00f3n de la documentaci\u00f3n de Fipy<\/a><\/li>\n<\/ul>\n<h2>Fuentes y lectura adicional<\/h2>\n<ul>\n<li>Fipy GitHub Problema #618: <a href=\"https:\/\/github.com\/usnistgov\/fipy\/issues\/618\">refinamiento de malla adaptativa con fipy?<\/a><\/li>\n<li>Gu\u00eda de pr\u00e1cticas recomendadas de campo de fase NIST: <a href=\"https:\/\/pages.nist.gov\/pf-recommended-practices\/bp-guide-gh\/ch2-numerical-implementation.html\">Implificaci\u00f3n num\u00e9rica<\/a><\/li>\n<li>Kuo et al. (2021). \u00abUn an\u00e1lisis de la mejora del rendimiento con refinamiento de malla adaptativa\u00bb. <em>computadoras &amp; Matem\u00e1ticas con aplicaciones<\/em>.<\/li>\n<li>PFHUB puntos de referencia: <a href=\"https:\/\/pages.nist.gov\/pfhub\/benchmarks\/\">https:\/\/pages.nist.gov\/pfhub\/benchmarks\/<\/a><\/li>\n<li>Framework Moose: <a href=\"https:\/\/mooseframework.inl.gov\/\">https:\/\/mooseframework.inl.gov\/<\/a><\/li>\n<li>prismas-pf: <a href=\"https:\/\/github.com\/prisms-center\/phaseField\">https:\/\/github.com\/prisms-center\/phasefield<\/a><\/li>\n<\/ul>\n","protected":false,"raw":"<p>Fipy no tiene refinamiento de malla adaptable incorporado (AMR). Los enfoques actuales involucran la generaci\u00f3n de mallas externas con GMSH (ineficiente para problemas din\u00e1micos), integraci\u00f3n con bibliotecas AMR dedicadas como LibMesh (desafiante arquitect\u00f3nica) o cambiar a c\u00f3digos de campo de fase alternativos que admiten AMR de forma nativa (Moose, Prisms-PF). AMR proporciona aceleraciones significativas (a menudo de 2 a 10 \u00d7) para problemas de campo de fase con interfaces localizadas, pero introduce complejidad algor\u00edtmica y puede que no valga la pena cuando se necesita una alta resoluci\u00f3n en todas partes. Si su simulaci\u00f3n Fipy tiene problemas con la memoria o el rendimiento debido a las mallas uniformes, primero optimice su malla est\u00e1tica, considere una resoluci\u00f3n global m\u00e1s gruesa con solucionadores m\u00e1s ajustados y solo busque AMR si su problema tiene una peque\u00f1a regi\u00f3n de inter\u00e9s clara (por ejemplo, una interfaz en movimiento) y est\u00e1 dispuesto a implementar personalizado Infraestructura de gesti\u00f3n de mallas.<\/p>\n<h2>Introducci\u00f3n: el dilema de la resoluci\u00f3n de malla<\/h2>\n<p>Las simulaciones de campo de fase a menudo involucran fen\u00f3menos complejos en evoluci\u00f3n: crecimiento de dendritas en la solidificaci\u00f3n, separaci\u00f3n de fase en aleaciones o interfaces electrodo-electrolitos en bater\u00edas. Estas simulaciones generalmente requieren alta resoluci\u00f3n espacial cerca de interfaces donde los gradientes son pronunciados, mientras que las mallas m\u00e1s gruesas son suficientes lejos de estas regiones. Una malla uniforme que es lo suficientemente fina como para resolver la interfaz en todas partes desperdicia recursos inform\u00e1ticos en \u00e1reas poco interesantes, lo que genera un uso excesivo de memoria y tiempos de ejecuci\u00f3n m\u00e1s lentos.<\/p>\n<p>El refinamiento de malla adaptativa (AMR) resuelve esto ajustando din\u00e1micamente la resoluci\u00f3n de la malla durante una simulaci\u00f3n, refinando las celdas donde la soluci\u00f3n cambia r\u00e1pidamente y se endurece donde es suave. Para los problemas de campo de fase, donde la interfaz ocupa una peque\u00f1a fracci\u00f3n del dominio, AMR puede reducir el recuento de celdas en un orden de magnitud o m\u00e1s, lo que permite simulaciones m\u00e1s grandes o una respuesta m\u00e1s r\u00e1pida en las estaciones de trabajo de escritorio.<\/p>\n<p>Pero si est\u00e1 utilizando Fipy, descubrir\u00e1 r\u00e1pidamente una dura verdad: <strong>Fipy no es compatible con AMR de forma nativa<\/strong>. Esto no siempre estuvo claro en la documentaci\u00f3n, por lo que muchos usuarios invierten tiempo explorando callejones sin salida antes de llegar a la misma conclusi\u00f3n que alcanzaron los desarrolladores de Fipy Core: el desajuste arquitect\u00f3nico entre el marco de volumen finito de Fipy y las bibliotecas tradicionales de AMR es sustancial.<\/p>\n<p>Esta gu\u00eda atraviesa la incertidumbre. Examinaremos lo que AMR podr\u00eda significar para sus simulaciones FIPY, revisaremos el estado actual del soporte de AMR, evaluaremos las soluciones pr\u00e1cticas y proporcionaremos un marco de decisi\u00f3n para ayudarlo a elegir el camino correcto a seguir.<\/p>\n<h2>\u00bfQu\u00e9 es el refinamiento de malla adaptativa (AMR)?<\/h2>\n<p>Antes de sumergirnos en detalles finos, establezcamos un modelo mental claro de c\u00f3mo funciona AMR y por qu\u00e9 es valioso.<\/p>\n<h3>La idea central<\/h3>\n<p>En una malla est\u00e1tica, eliges una resoluci\u00f3n \u00fanica (tama\u00f1o de celda) que debe satisfacer la parte m\u00e1s exigente de tu dominio en todas partes. Si necesita un espaciado de 10 nm para resolver una punta dendrita pero el dominio tiene 1 mm de ancho, una malla uniforme requerir\u00eda 100 000 celdas en cada dimensi\u00f3n, claramente no factible.<\/p>\n<p>AMR comienza con una malla de base gruesa e introduce parches m\u00e1s finas solo donde sea necesario. Los criterios de refinamiento suelen incluir:<\/p>\n<ul>\n<li><strong>Umbral de gradiente<\/strong>: refinar d\u00f3nde |\u2207\u03c6| Supera un valor (para par\u00e1metros de orden de campo de fase)<\/li>\n<li><strong>Estimadores de error<\/strong>: utilice indicadores de error basados en soluciones o en residuos<\/li>\n<li><strong>Seguimiento de funciones<\/strong>: siga las interfaces o estructuras conocidas<\/li>\n<\/ul>\n<p>La malla se adapta peri\u00f3dicamente (cada n pasos de tiempo o cuando se activan ciertos criterios), requiriendo:<\/p>\n<ol>\n<li><strong>Algoritmos de divisi\u00f3n de celdas\/engrosamiento<\/strong><\/li>\n<li><strong>Interpolaci\u00f3n de datos<\/strong> para transferir campos de soluci\u00f3n de mallas antiguas a nuevas<\/li>\n<li><strong>Equilibrio de carga<\/strong> para simulaciones en paralelo<\/li>\n<li><strong>Ejecuci\u00f3n de la conservaci\u00f3n<\/strong> a trav\u00e9s de l\u00edmites groseros y finos<\/li>\n<\/ol>\n<h3>Malla est\u00e1tica vs est\u00e1tica: una comparaci\u00f3n cuantitativa<\/h3>\n<p>Un estudio de 2021 en <em>computadoras &amp; Las matem\u00e1ticas con aplicaciones<\/em> analiz\u00f3 el rendimiento de AMR para varios problemas de PDE y descubri\u00f3 que AMR redujo el consumo de memoria en un 60 a 80 % y el tiempo de reloj de pared en un 40 a 70 % en comparaci\u00f3n con las mallas uniformes refinadas con el mismo umbral de precisi\u00f3n, incluso despu\u00e9s de tener en cuenta la sobrecarga de AMR.<\/p>\n<p>Sin embargo, el mismo estudio se\u00f1al\u00f3 que para problemas en los que se necesita una alta resoluci\u00f3n en casi todas partes (p. ej., descomposici\u00f3n espinodal en etapa temprana con fluctuaciones de composici\u00f3n uniforme), AMR ofreci\u00f3 un beneficio m\u00ednimo y, a veces, debido a los gastos generales de manejo.<\/p>\n<h2>El estado de AMR en Fipy: realidad actual<\/h2>\n<h3>Posici\u00f3n oficial del equipo Fipy<\/h3>\n<p>La fuente m\u00e1s autorizada sobre FIPY AMR es el n\u00famero 618 de GitHub, inaugurado en febrero de 2019. La discusi\u00f3n revela la postura del proyecto:<\/p>\n<blockquote><p><strong>GUYER<\/strong> (mantenedor de Fipy): \"Hemos hecho intentos ocasionales en esto, pero nada fruct\u00edfero. El uso de GMSH para regenerar la malla y luego reinterpolar los datos es irremediablemente ineficiente (lo he hecho por problemas cuasi est\u00e1ticos). De forma adecuada, Fipy deber\u00eda integrarse con LibMesh o alg\u00fan otro Mesher adaptativo dedicado; me gustar\u00eda que esto sucediera, pero hasta ahora, las arquitecturas fundamentales de Fipy y los Mesers que he visto son demasiado diferentes\".<\/p><\/blockquote>\n<p>Esta no es una caracter\u00edstica de \"tal vez alg\u00fan d\u00eda\": es un reconocimiento de que el dise\u00f1o de Fipy y los requisitos de AMR eficiente est\u00e1n fundamentalmente desalineados. La arquitectura Fipy, construida sobre una sencilla discretizaci\u00f3n de volumen finito con mallas estructuradas o no estructuradas representadas en la memoria como cuadr\u00edculas fijas, no se adapta a los cambios de topolog\u00eda din\u00e1mica que requiere AMR sin una reestructuraci\u00f3n significativa.<\/p>\n<h3>Por qu\u00e9 la integraci\u00f3n es dif\u00edcil<\/h3>\n<p>La abstracci\u00f3n de malla de Fipy (<code>Grid2D<\/code>, <code>Grid3D<\/code>, <code>Gmsh2D<\/code>, <code>Gmsh3D<\/code>, etc.) asume una topolog\u00eda est\u00e1tica. Las celdas, las caras y su conectividad se establecen en el inicio de la simulaci\u00f3n y persisten en todo momento. AMR requiere:<\/p>\n<ul>\n<li><strong>Conectividad din\u00e1mica<\/strong>: cuando una celda se divide, aparecen nuevas celdas, se cambian los vecinos y se redefinen las relaciones cara a celda.<\/li>\n<li><strong>Migraci\u00f3n de datos<\/strong>: las variables de soluci\u00f3n deben interpolarse de las celdas antiguas a las nuevas, preservando las propiedades de conservaci\u00f3n.<\/li>\n<li><strong>Rec\u00f3mputo del solucionador<\/strong>: la estructura de matriz escasa cambia a medida que cambia el n\u00famero de celdas, lo que requiere reasignaci\u00f3n de matriz y reconstrucci\u00f3n de preacondicionador.<\/li>\n<li><strong>Redistribuci\u00f3n paralela<\/strong>: en simulaciones MPI, las c\u00e9lulas refinadas crean desequilibrio de carga; Los procesadores necesitan intercambiar regiones fantasma.<\/li>\n<\/ul>\n<p>Ninguno de estos es compatible con el marco actual de Fipy. Intentar implementarlos esencialmente significar\u00eda reescribir grandes porciones de FIPY.<\/p>\n<h2>Enfoques pr\u00e1cticos (y sus compensaciones)<\/h2>\n<p>Dada la falta de apoyo nativo, \u00bfcu\u00e1les son sus opciones si necesita un comportamiento similar al de AMR con Fipy? Estos son los caminos que los usuarios han explorado, clasificados de la m\u00e1s a la menos pr\u00e1ctica.<\/p>\n<h3>1. Utilice un c\u00f3digo de campo de fase alternativo con AMR<\/h3>\n<p><strong>Verdicto<\/strong>: Recomendado si AMR es esencial y est\u00e1s iniciando un nuevo proyecto.<\/p>\n<p>Varios c\u00f3digos de campo de fase de c\u00f3digo abierto admiten AMR de forma nativa:<\/p>\n<ul>\n<li><strong>Moose<\/strong> (Entorno de simulaci\u00f3n orientado a objetos multif\u00edsico): utiliza libmesh para el enlazado adaptativo, admite AMR paralelo con equilibrio de carga e incluye m\u00f3dulos de campo de fase.<\/li>\n<li><strong>prisms-pf<\/strong>: Basado en Deal.ii, ofrece AMR escalable para problemas de campo de fase con criterios de refinamiento sofisticados.<\/li>\n<li><strong>OpenPhase<\/strong>: admite AMR basado en c\u00e9lulas para la evoluci\u00f3n de la microestructura.<\/li>\n<\/ul>\n<p>Estos c\u00f3digos est\u00e1n listos para la producci\u00f3n, est\u00e1n bien documentados y tienen comunidades activas. La compensaci\u00f3n es una curva de aprendizaje m\u00e1s pronunciada si ya est\u00e1 invertido en la API y el ecosistema de Python de Fipy.<\/p>\n<p><strong>Cu\u00e1ndo elegir esto<\/strong>: est\u00e1 iniciando un nuevo proyecto de simulaci\u00f3n donde AMR es un requisito dif\u00edcil (dominio grande, interfaz localizada, recursos de computaci\u00f3n limitados) y puede permitirse el lujo de aprender un nuevo marco.<\/p>\n<p><strong>Enlace interno<\/strong>: para obtener una descripci\u00f3n general de los conceptos de modelado de campo de fase, consulte nuestra gu\u00eda <a href=\"\/understanding-phase-field-models-in-materials-science\/\">Comprensi\u00f3n de modelos de campo de fase en ciencia de materiales<\/a>.<\/p>\n<h3>2. Pre-computar varias mallas est\u00e1ticas y cambiar entre ellas<\/h3>\n<p><strong>Verdicto<\/strong>: Semipr\u00e1ctico para problemas con patrones de refinamiento predecibles.<\/p>\n<p>Si su simulaci\u00f3n tiene una trayectoria conocida (por ejemplo, una dendrita que crece en una direcci\u00f3n), puede crear una serie de mallas con zonas de refinamiento colocadas manualmente con GMSH. En los pasos de tiempo predefinidos, usted:<\/p>\n<ol>\n<li>Detener la simulaci\u00f3n<\/li>\n<li>Interpolar campos desde la malla antigua hasta la nueva malla<\/li>\n<li>Reiniciar con la nueva malla<\/li>\n<\/ol>\n<p><strong>Desaf\u00edos<\/strong>:<\/p>\n<ul>\n<li>Fipy no tiene conmutaci\u00f3n de malla incorporada. Tendr\u00eda que exportar campos centrados en celdas, crear un nuevo objeto <code>Mesh<\/code>, interpolar manualmente y reinicializar solucionadores.<\/li>\n<li>La interpolaci\u00f3n debe preservar la conservaci\u00f3n: la interpolaci\u00f3n lineal simple no ser\u00e1 suficiente para los m\u00e9todos de volumen finito conservador de flujo.<\/li>\n<li>El proceso es manual y propenso a errores; No es adecuado para la adaptaci\u00f3n din\u00e1mica basada en gradientes de soluci\u00f3n.<\/li>\n<\/ul>\n<p><strong>Cu\u00e1ndo elegir esto<\/strong>: su patr\u00f3n de refinamiento es espacialmente predecible (por ejemplo, un frente en movimiento que se mantiene dentro de una regi\u00f3n delimitadora conocida) y puede tolerar paradas ocasionales e intervenci\u00f3n manual.<\/p>\n<p><strong>Advertencia de trampa<\/strong>: la mala interpolaci\u00f3n en las interfaces finas y gruesas puede introducir p\u00e9rdidas de precisi\u00f3n de primer orden o oscilaciones no f\u00edsicas.<\/p>\n<h3>3. Integraci\u00f3n de la Biblioteca AMR Externa (LibMesh, Paramesh)<\/h3>\n<p><strong>Veredicto<\/strong>: nivel de investigaci\u00f3n; No est\u00e1 listo para la producci\u00f3n.<\/p>\n<p>El mantenedor de Fipy mencion\u00f3 libmesh como un objetivo de integraci\u00f3n potencial. LibMesh proporciona un marco de volumen finito\/volumen finito con AMR, utilizado por Moose y otros. Sin embargo, la integraci\u00f3n de Fipy con libmesh requerir\u00eda:<\/p>\n<ul>\n<li>Reescribiendo la discretizaci\u00f3n de Fipy para utilizar el sistema de malla y ensamblaje de LibMesh<\/li>\n<li>Transferir la ecuaci\u00f3n existente de Fipy y la infraestructura del solucionador<\/li>\n<li>Abordando las diferencias fundamentales: Fipy es un volumen finito, libmesh es principalmente un elemento finito<\/li>\n<\/ul>\n<p>Existen desaf\u00edos similares con Paramesh (una biblioteca AMR estructurada en bloques en Fortran). El desajuste arquitect\u00f3nico significa que la integraci\u00f3n no es una cuesti\u00f3n de \"enchufe\" AMR, es un gran esfuerzo de ingenier\u00eda.<\/p>\n<p><strong>Cu\u00e1ndo considerar esto<\/strong>: es un desarrollador que planea contribuir a Fipy Core o mantener una bifurcaci\u00f3n a largo plazo con soporte de AMR. No recomendado para usuarios finales.<\/p>\n<h3>4. Acepta la limitaci\u00f3n: optimiza tu malla est\u00e1tica<\/h3>\n<p><strong>Verdicto<\/strong>: el valor predeterminado pragm\u00e1tico para la mayor\u00eda de los usuarios de Fipy.<\/p>\n<p>Antes de seguir AMR, pregunte: \u00bfPuedo lograr un rendimiento aceptable con una malla est\u00e1tica bien dise\u00f1ada? A menudo, la respuesta es s\u00ed si:<\/p>\n<ul>\n<li><strong>Utilice mallas graduadas<\/strong>: refinar manualmente las interfaces cercanas con transiciones suaves (no saltos de relaci\u00f3n de aspecto grandes)<\/li>\n<li><strong>Emplear las funciones de densidad de malla local<\/strong>: en GMSH, defina campos de tama\u00f1o de malla que concentren las celdas donde sea necesario<\/li>\n<li><strong>Opciones de Solucionador de Fipy de apalancamiento<\/strong>: utilice preacondicionadores eficientes (por ejemplo, <code>ScipyKrylov<\/code> con <code>ilu<\/code> preacondicionamiento) y paso de tiempo apropiado<\/li>\n<li><strong>Reducir el refinamiento innecesario<\/strong>: muchos usuarios refinan \"solo para estar seguros\". Los estudios de convergencia a menudo revelan que las mallas m\u00e1s gruesas son suficientes para resultados cualitativos.<\/li>\n<\/ul>\n<p>Por ejemplo, una simulaci\u00f3n de dendrita de campo de fase podr\u00eda necesitar celdas finas solo dentro de unos pocos anchos de interfaz del frente s\u00f3lido-l\u00edquido. Una malla est\u00e1tica con clasificaci\u00f3n manual puede capturar esto con el 10-20% de las celdas de una malla fina uniforme, aunque sin la adaptabilidad para rastrear un frente en movimiento. Si el frente se mueve lentamente en relaci\u00f3n con el tiempo de c\u00e1lculo, puede aceptar que algunas regiones se subdividen a medida que avanza la simulaci\u00f3n, o simplemente comenzar con una malla lo suficientemente fina como para cubrir toda la trayectoria esperada.<\/p>\n<p><strong>Cu\u00e1ndo elegir esto<\/strong>: su dominio de simulaci\u00f3n no es enorme, su regi\u00f3n de interfaz es una fracci\u00f3n manejable del dominio o puede tolerar alguna ineficiencia para la simplicidad del c\u00f3digo.<\/p>\n<h3>5. Implementar una capa AMR personalizada<\/h3>\n<p><strong>Verdicto<\/strong>: solo usuarios avanzados; alto riesgo.<\/p>\n<p>En teor\u00eda, podr\u00edas construir AMR sobre Fipy al:<\/p>\n<ol>\n<li>Mantener un mapeo desde los \u00edndices de celda de Fipy a una estructura de malla jer\u00e1rquica<\/li>\n<li>Construyendo peri\u00f3dicamente un nuevo <code>Grid2D<\/code>\/<code>Grid3D<\/code> con celdas refinadas<\/li>\n<li>Variables de soluci\u00f3n de interpolaci\u00f3n usando los m\u00e9todos de Fipy <code>cellVariable<\/code><\/li>\n<li>Reconstrucci\u00f3n del sistema lineal<\/li>\n<\/ol>\n<p>Este enfoque enfrenta severos obst\u00e1culos:<\/p>\n<ul>\n<li>Los objetos <code>Mesh<\/code> de Fipy no est\u00e1n dise\u00f1ados para la modificaci\u00f3n de simulaci\u00f3n en el medio<\/li>\n<li>Las estructuras de datos <code>CellVariable<\/code> est\u00e1n estrechamente acopladas a la malla original de indexaci\u00f3n<\/li>\n<li>Reconstruir el sistema de ecuaciones (<code>TransientTerm<\/code>, <code>DiffusionTerm<\/code>, etc.) La simulaci\u00f3n intermedia es compleja<\/li>\n<li>No hay garant\u00edas de conservaci\u00f3n en los pasos de refinamiento<\/li>\n<\/ul>\n<p>Algunos investigadores han intentado variantes de esto, pero no existe una implementaci\u00f3n de c\u00f3digo abierto que funcione.<\/p>\n<p><strong>Cu\u00e1ndo considerar esto<\/strong>: tiene requisitos de investigaci\u00f3n espec\u00edficos que exigen que FIPY, AMR sea cr\u00edtico y est\u00e9 preparado para invertir meses en desarrollo y validaci\u00f3n. No se recomienda para uso rutinario.<\/p>\n<h2>Marco de decisi\u00f3n: \u00bfDebe buscar AMR con Fipy?<\/h2>\n<p>Utilice este diagrama de flujo para determinar su ruta:<\/p>\n<pre><code>Do you need AMR? (Is your problem large + interface-localized?)\n\u2502\n\u251c\u2500 No \u2192 Optimize static mesh (Section 4)\n\u2502\n\u2514\u2500 Yes \u2192 Can you switch to a phase-field code with AMR?\n\u2502\n\u251c\u2500 Yes \u2192 Use MOOSE\/PRISMS-PF\/OpenPhase\n\u2502\n\u2514\u2500 No \u2192 Are you willing to build custom AMR infrastructure?\n\u2502\n\u251c\u2500 Yes \u2192 Research-level implementation (Section 5)\n\u2502\n\u2514\u2500 No \u2192 Accept that FiPy cannot do AMR;\neither live with static mesh inefficiency\nor change your problem scope.<\/code><\/pre>\n<h3>Preguntas clave para responder<\/h3>\n<ol>\n<li><strong>\u00bfQu\u00e9 porcentaje de su dominio necesita una buena resoluci\u00f3n?<\/strong><br> - &lt; 20%: AMR podr\u00eda proporcionar una aceleraci\u00f3n de 3 a 10 \u00d7 si est\u00e1 disponible<br> - &gt; 50%: el beneficio de AMR disminuye; La malla est\u00e1tica puede ser m\u00e1s simple y r\u00e1pida<\/li>\n<li><strong>\u00bfSu interfaz se mueve significativamente durante la simulaci\u00f3n?<\/strong><br> - S\u00ed: el seguimiento de AMR se vuelve valioso; De lo contrario, la malla graduada est\u00e1tica debe cubrir toda la trayectoria posible<br> - No: una sola malla graduada est\u00e1tica es suficiente<\/li>\n<li><strong>\u00bfTiene recursos para desarrolladores para crear soporte de AMR?<\/strong><br> - S\u00ed: podr\u00eda contribuir a FIPY o mantener una bifurcaci\u00f3n (alto costo a largo plazo)<br> - No: Elija c\u00f3digo alternativo o malla est\u00e1tica<\/li>\n<li><strong>\u00bfEs la escalabilidad paralela cr\u00edtica?<\/strong><br> - AMR presenta desaf\u00edos de equilibrio de carga; Las mallas est\u00e1ticas paralelizan m\u00e1s de manera predecible<br>: si necesita cientos de n\u00facleos, las bibliotecas AMR como Moose manejan esto mejor de lo que podr\u00eda cualquier truco.<\/li>\n<\/ol>\n<h2>Trampas comunes y conceptos err\u00f3neos<\/h2>\n<p>Incluso si persigue AMR a trav\u00e9s de c\u00f3digos alternativos, tenga cuidado con estos problemas:<\/p>\n<h3>Escolar 1: Sobre-refinamiento<\/h3>\n<p>Establecer criterios de refinamiento demasiado agresivos conduce a la creaci\u00f3n excesiva de celdas, negando los beneficios de AMR y posiblemente excediendo los l\u00edmites de memoria. La Gu\u00eda de pr\u00e1cticas recomendadas de campo de fase NIST aconseja: \"Limite los niveles de refinamiento\" y \"Utilice la restricci\u00f3n de vecindario adecuada (no m\u00e1s de una diferencia de nivel de refinamiento entre las celdas adyacentes)\".<\/p>\n<p><strong>Recomendaci\u00f3n<\/strong>: Comience con umbrales conservadores (p. ej., refine solo donde |\u2207\u03c6| &gt; 0,05\/\u0394x) y controle el crecimiento del recuento de c\u00e9lulas.<\/p>\n<h3>Escolar 2: mala interpolaci\u00f3n en los l\u00edmites gruesos y finos<\/h3>\n<p>Cuando los datos se mueven entre mallas de diferentes niveles de refinamiento, se producen errores de conservaci\u00f3n y p\u00e9rdida de precisi\u00f3n. La convergencia de primer orden en estas interfaces puede dominar el error global.<\/p>\n<p><strong>Recomendaci\u00f3n<\/strong>: utilizar esquemas de interpolaci\u00f3n conservadores; En los m\u00e9todos de volumen finito, asegure la coincidencia de flujo entre las interfaces de refinamiento. Bibliotecas como libmesh manejan esto internamente: evite la interpolaci\u00f3n de bricolaje a menos que sea un experto.<\/p>\n<h3>Escollo 3: charla de malla<\/h3>\n<p>El refinamiento continuo\/endurecimiento entre pasos de tiempo adyacentes (por ejemplo, cuando una interfaz oscila alrededor de un l\u00edmite de celda) causa inestabilidad y c\u00e1lculo desperdiciado.<\/p>\n<p><strong>Recomendaci\u00f3n<\/strong>: Implemente la hist\u00e9resis: requiera que una celda se mantenga por encima\/por debajo del umbral de refinamiento durante varios pasos antes de cambiar de nivel.<\/p>\n<h3>Escolar 4: Ignorar el equilibrio de carga en carreras paralelas<\/h3>\n<p>El refinamiento din\u00e1mico crea una distribuci\u00f3n celular desigual en los rangos MPI. Algunos procesadores se inundan con celdas refinadas, mientras que otros est\u00e1n inactivos.<\/p>\n<p><strong>Recomendaci\u00f3n<\/strong>: use bibliotecas con equilibrio de carga incorporado (alce, prisms-pf). Si se implementa a s\u00ed mismo, vuelva a particionar peri\u00f3dicamente la malla utilizando curvas de relleno de espacio o partici\u00f3n de gr\u00e1ficos.<\/p>\n<h2>Expectativas de rendimiento: \u00bfQu\u00e9 puedes ganar de manera realista?<\/h2>\n<p>Basado en puntos de referencia publicados:<\/p>\n<ul>\n<li><strong>PFHub Benchmark 3<\/strong> (Crecimiento dendr\u00edtica): alces y prismas-PF con AMR lograron los tiempos de ejecuci\u00f3n m\u00e1s r\u00e1pidos, utilizando \u00f3rdenes de magnitud menos celdas que las mallas uniformes.<\/li>\n<li><strong>CFD general\/campo de fase<\/strong>: la AMR normalmente reduce el recuento de c\u00e9lulas en un 60 a 80% y el tiempo de pared en un 40 a 70% frente a mallas uniformes con una precisi\u00f3n equivalente.<\/li>\n<li><strong>Overhead<\/strong>: AMR agrega una sobrecarga de tiempo de ejecuci\u00f3n del 5 al 15 % para la gesti\u00f3n de mallas y la interpolaci\u00f3n; Esto se amortiza por el recuento de c\u00e9lulas reducido.<\/li>\n<\/ul>\n<p><strong>Pero nota<\/strong>: estos n\u00fameros provienen de c\u00f3digos que tienen AMR profundamente integrado. Un bucle FIPY+GMSH de Kludgy probablemente ser\u00eda m\u00e1s lento que una malla est\u00e1tica debido a la generaci\u00f3n de malla repetida y los costos de interpolaci\u00f3n.<\/p>\n<h2>Paso a paso: qu\u00e9 hacer en su lugar<\/h2>\n<p>Si est\u00e1 bloqueado por la limitaci\u00f3n de AMR de Fipy, aqu\u00ed hay un plan de acci\u00f3n pr\u00e1ctico:<\/p>\n<h3>Paso 1: Optimice su malla est\u00e1tica actual<\/h3>\n<ol>\n<li><strong>Realice un estudio de convergencia de malla<\/strong>: encuentre la malla m\u00e1s gruesa que proporcione resultados aceptables. Muchos usuarios refinan.<\/li>\n<li><strong>Utilice mallas graduadas<\/strong>: en GMSH, defina un campo <code>MeshSize<\/code> que var\u00eda con la distancia de su regi\u00f3n de inter\u00e9s.<\/li>\n<li><strong>Habilitar solucionadores eficientes<\/strong>: use <code>ScipyKrylov<\/code> (GMRES) con <code>ilu<\/code> preacondicionamiento en lugar de opciones de PETSC predeterminadas si su problema es de tama\u00f1o moderado.<\/li>\n<li><strong>Considere el paso del tiempo<\/strong>: los pasos de tiempo m\u00e1s grandes con solucionadores impl\u00edcitos pueden compensar las mallas m\u00e1s gruesas.<\/li>\n<\/ol>\n<h3>Paso 2: evaluar c\u00f3digos alternativos<\/h3>\n<p>Si las mallas est\u00e1ticas a\u00fan no lo cortan:<\/p>\n<ul>\n<li><strong>Moose<\/strong>: <a href=\"https:\/\/mooseframework.inl.gov\/\">https:\/\/mooseframework.inl.gov\/<\/a> \u2013 Multif\u00edsica completa con AMR, curva de aprendizaje m\u00e1s pronunciada pero potente.<\/li>\n<li><strong>prisms-pf<\/strong>: <a href=\"https:\/\/github.com\/prisms-center\/phaseField\">https:\/\/github.com\/prisms-center\/phasefield<\/a> \u2013 enfocado en el campo de fase, basado en deal.ii, excelente AMR.<\/li>\n<li><strong>OpenPhase<\/strong>: <a href=\"https:\/\/github.com\/openphase\/openphase\">https:\/\/github.com\/openphase\/openphase<\/a> \u2013 espec\u00edficamente para la microestructura.<\/li>\n<\/ul>\n<p>Ejecute un peque\u00f1o punto de referencia (por ejemplo, una descomposici\u00f3n espinodal 2D) para medir el rendimiento y el esfuerzo de portabilidad.<\/p>\n<h3>Paso 3: Si debes quedarte con Fipy y necesitas AMR<\/h3>\n<p>Vuelva a evaluar la formulaci\u00f3n de su problema:<\/p>\n<ul>\n<li>\u00bfPuedes reducir el tama\u00f1o del dominio? Los dominios m\u00e1s peque\u00f1os necesitan menos refinamiento.<\/li>\n<li>\u00bfPuedes usar simetr\u00eda? Los modelos de cuartos de dominio cortan los recuentos de c\u00e9lulas de forma espectacular.<\/li>\n<li>\u00bfPuedes aceptar resultados menos precisos? A veces, el comportamiento cualitativo es suficiente para la investigaci\u00f3n en etapa inicial.<\/li>\n<\/ul>\n<p>Si ninguno de estos funciona, ha llegado al techo de Fipy para este problema. Considere contribuir al desarrollo de Fipy AMR (consulte el problema #618) o las herramientas de conmutaci\u00f3n.<\/p>\n<h2>Conclusi\u00f3n y recomendaciones<\/h2>\n<p>El refinamiento de malla adaptativa es una poderosa t\u00e9cnica para simulaciones de campo de fase con interfaces localizadas, que ofrece ganancias de rendimiento sustanciales cuando se implementan correctamente. Sin embargo, <strong>fipy no es compatible con AMR<\/strong>, y las brechas arquitect\u00f3nicas significan que es poco probable que el soporte nativo sea a corto plazo.<\/p>\n<p><strong>Nuestras recomendaciones<\/strong>:<\/p>\n<ol>\n<li><strong>Para la mayor\u00eda de los usuarios de Fipy<\/strong>: optimice su malla est\u00e1tica con dimensionamiento graduado y solucionadores eficientes. Esto resuelve el 80% de los problemas de rendimiento sin dejar el c\u00f3modo entorno de Python de Fipy.<\/li>\n<li><strong>Para nuevos proyectos con exigencias estrictas de AMR<\/strong>: elija Moose o Prisms-PF. El tiempo invertido en aprender estos marcos vale la pena en escalabilidad y acceso a funciones avanzadas como AMR, solucionadores no lineales y acoplamiento multif\u00edsico.<\/li>\n<li><strong>Para los investigadores que impulsan los l\u00edmites del campo de fase<\/strong>: Considere contribuir al desarrollo de FIPY o mantener una bifurcaci\u00f3n con el apoyo de AMR, pero prep\u00e1rese para un compromiso de varios a\u00f1os.<\/li>\n<\/ol>\n<p>Recuerde: el mejor c\u00f3digo de simulaci\u00f3n es el que puede usar de manera efectiva. Una implementaci\u00f3n de AMR \"perfecta\" que no puede trabajar es peor que una malla est\u00e1tica \"limitada\" que produce resultados confiables a tiempo.<\/p>\n<h2>Gu\u00edas relacionadas<\/h2>\n<ul>\n<li><a href=\"\/using-fipy-for-phase-field-modeling\/\">Uso de Fipy para el modelado de campo de fase<\/a><\/li>\n<li><a href=\"\/understanding-phase-field-models-in-materials-science\/\">Comprender los modelos de campo de fase en la ciencia de los materiales<\/a><\/li>\n<li><a href=\"\/solving-diffusion-equations-with-fipy\/\">Resolviendo ecuaciones de difusi\u00f3n con Fipy<\/a><\/li>\n<li><a href=\"\/boundary-conditions-theory-and-implementation-in-fipy\/\">Condiciones de contorno: teor\u00eda e implementaci\u00f3n en Fipy<\/a><\/li>\n<li><a href=\"\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Gesti\u00f3n de problemas de PDE a gran escala: estrategias y estudios de casos de HPC<\/a><\/li>\n<li><a href=\"\/reading-and-understanding-fipy-documentation\/\">Lectura y comprensi\u00f3n de la documentaci\u00f3n de Fipy<\/a><\/li>\n<\/ul>\n<h2>Fuentes y lectura adicional<\/h2>\n<ul>\n<li>Fipy GitHub Problema #618: <a href=\"https:\/\/github.com\/usnistgov\/fipy\/issues\/618\">refinamiento de malla adaptativa con fipy?<\/a><\/li>\n<li>Gu\u00eda de pr\u00e1cticas recomendadas de campo de fase NIST: <a href=\"https:\/\/pages.nist.gov\/pf-recommended-practices\/bp-guide-gh\/ch2-numerical-implementation.html\">Implificaci\u00f3n num\u00e9rica<\/a><\/li>\n<li>Kuo et al. (2021). \"Un an\u00e1lisis de la mejora del rendimiento con refinamiento de malla adaptativa\". <em>computadoras &amp; Matem\u00e1ticas con aplicaciones<\/em>.<\/li>\n<li>PFHUB puntos de referencia: <a href=\"https:\/\/pages.nist.gov\/pfhub\/benchmarks\/\">https:\/\/pages.nist.gov\/pfhub\/benchmarks\/<\/a><\/li>\n<li>Framework Moose: <a href=\"https:\/\/mooseframework.inl.gov\/\">https:\/\/mooseframework.inl.gov\/<\/a><\/li>\n<li>prismas-pf: <a href=\"https:\/\/github.com\/prisms-center\/phaseField\">https:\/\/github.com\/prisms-center\/phasefield<\/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\"> 12<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Fipy no tiene refinamiento de malla adaptable incorporado (AMR). Los enfoques actuales involucran la generaci\u00f3n de mallas externas con GMSH (ineficiente para problemas din\u00e1micos), integraci\u00f3n con bibliotecas AMR dedicadas como LibMesh (desafiante arquitect\u00f3nica) o cambiar a c\u00f3digos de campo de fase alternativos que admiten AMR de forma nativa (Moose, Prisms-PF). AMR proporciona aceleraciones significativas (a [&hellip;]<\/p>\n","protected":false,"raw":""},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"es_ES","_original_post":"https:\/\/matforge.org\/?p=209","iawp_total_views":0,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-607","post","type-post","status-publish","format-standard","hentry","category-fipy-documentation-examples-development","es-ES"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos - 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\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  12 minutesFipy no tiene refinamiento de malla adaptable incorporado (AMR). Los enfoques actuales involucran la generaci\u00f3n de mallas externas con GMSH (ineficiente para problemas din\u00e1micos), integraci\u00f3n con bibliotecas AMR dedicadas como LibMesh (desafiante arquitect\u00f3nica) o cambiar a c\u00f3digos de campo de fase alternativos que admiten AMR de forma nativa (Moose, Prisms-PF). AMR proporciona aceleraciones significativas (a [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-22T08:16:54+00:00\" \/>\n<meta name=\"author\" content=\"steven\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"steven\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\\\/\"},\"author\":{\"name\":\"steven\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"headline\":\"Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos\",\"datePublished\":\"2026-07-22T08:16:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\\\/\"},\"wordCount\":3676,\"commentCount\":0,\"articleSection\":[\"Fipy: Documentaci\u00f3n, ejemplos &amp; Desarrollo\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/es\\\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\\\/\",\"name\":\"Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-07-22T08:16:54+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos\"}]},{\"@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\\\/8f690fb596d657b12994b83caa788f03\",\"name\":\"steven\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"caption\":\"steven\"},\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/steven\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos - 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\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/","og_locale":"es_ES","og_type":"article","og_title":"Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos - matforge.org","og_description":"Reading Time:  12 minutesFipy no tiene refinamiento de malla adaptable incorporado (AMR). Los enfoques actuales involucran la generaci\u00f3n de mallas externas con GMSH (ineficiente para problemas din\u00e1micos), integraci\u00f3n con bibliotecas AMR dedicadas como LibMesh (desafiante arquitect\u00f3nica) o cambiar a c\u00f3digos de campo de fase alternativos que admiten AMR de forma nativa (Moose, Prisms-PF). AMR proporciona aceleraciones significativas (a [&hellip;]","og_url":"https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/","og_site_name":"matforge.org","article_published_time":"2026-07-22T08:16:54+00:00","author":"steven","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"steven","Tiempo de lectura":"19 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/"},"author":{"name":"steven","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"headline":"Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos","datePublished":"2026-07-22T08:16:54+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/"},"wordCount":3676,"commentCount":0,"articleSection":["Fipy: Documentaci\u00f3n, ejemplos &amp; Desarrollo"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/","url":"https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/","name":"Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-07-22T08:16:54+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"breadcrumb":{"@id":"https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/es\/adaptive-mesh-refinement-in-fipy-dynamic-resolution-for-complex-phenomena\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/es\/"},{"@type":"ListItem","position":2,"name":"Refinamiento de malla adaptativa en Fipy: resoluci\u00f3n din\u00e1mica para fen\u00f3menos complejos"}]},{"@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\/8f690fb596d657b12994b83caa788f03","name":"steven","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","caption":"steven"},"url":"https:\/\/matforge.org\/author\/steven\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/607","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\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=607"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/607\/revisions"}],"predecessor-version":[{"id":682,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/607\/revisions\/682"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=607"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=607"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}