{"id":592,"date":"2026-07-22T08:17:32","date_gmt":"2026-07-22T08:17:32","guid":{"rendered":"https:\/\/matforge.org\/?p=592","raw":"https:\/\/matforge.org\/?p=592"},"modified":"2026-07-22T08:17:32","modified_gmt":"2026-07-22T08:17:32","slug":"extending-fipy-with-custom-modules","status":"publish","type":"post","link":"https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/","title":{"rendered":"Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados","raw":"Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados"},"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\"> 9<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>Fipy es m\u00e1s \u00fatil cuando deja de tratarlo como una colecci\u00f3n de scripts de ejemplo aislados y comienza a usarlo como un marco flexible para crear sus propios flujos de trabajo PDE. Ese cambio importa porque los proyectos de simulaci\u00f3n reales rara vez permanecen simples por mucho tiempo. Un modelo que comienza como una ecuaci\u00f3n en una malla a menudo se convierte en un sistema con propiedades de material reutilizables, t\u00e9rminos de origen no lineal, campos acoplados, par\u00e1metros espec\u00edficos de escenario y pasos de postprocesamiento repetidos. En ese momento, mantener todo dentro de un script en expansi\u00f3n generalmente hace que el c\u00f3digo sea m\u00e1s dif\u00edcil de depurar, m\u00e1s dif\u00edcil de confiar y mucho m\u00e1s dif\u00edcil de reutilizar.<\/p>\n<p>Ah\u00ed es donde los m\u00f3dulos personalizados se vuelven valiosos. En Fipy, extender el marco no siempre significa reescribir internos o crear jerarqu\u00edas de clase profunda. Muy a menudo, la extensi\u00f3n m\u00e1s efectiva es un m\u00f3dulo de Python limpio que organiza una parte del modelo num\u00e9rico: creaci\u00f3n de mallas, configuraci\u00f3n variable, l\u00f3gica de coeficiente, ensamblaje de ecuaci\u00f3n, manejo de fuente, control del solucionador o rutinas de salida. El objetivo no es hacer que el proyecto sea m\u00e1s abstracto por s\u00ed mismo. El objetivo es hacer que el modelo matem\u00e1tico sea m\u00e1s f\u00e1cil de leer, probar, modificar y ejecutar en varios casos.<\/p>\n<p>Una buena estrategia de extensi\u00f3n de Fipy comienza con una pregunta pr\u00e1ctica: \u00bfqu\u00e9 necesita ser exactamente reutilizable? A veces, la respuesta es un generador de fuentes personalizado. A veces es una f\u00e1brica de ecuaci\u00f3n acoplada. A veces es simplemente una estructura de paquetes que separa la f\u00edsica de los scripts de lanzamiento. Una vez que est\u00e1 claro, Fipy se vuelve mucho m\u00e1s f\u00e1cil de escalar sin perder claridad.<\/p>\n<h2>Comience identificando el punto de extensi\u00f3n correcto<\/h2>\n<p>El mayor error que cometen las personas al extender Fipy es asumir que cada patr\u00f3n repetido requiere una clase personalizada de bajo nivel. En la pr\u00e1ctica, muchos problemas pueden resolverse con un enfoque mucho m\u00e1s ligero. Si sigue reescribiendo la misma configuraci\u00f3n para una malla, condiciones iniciales, restricciones de l\u00edmite o coeficientes, es posible que solo necesite un m\u00f3dulo de utilidad. Si su principal dificultad es construir la misma familia de ecuaciones bajo diferentes opciones de par\u00e1metros, probablemente necesite un generador de ecuaciones. Si su modelo incluye un comportamiento de origen no lineal que aparece en varios casos, un auxiliar de t\u00e9rmino fuente puede ser el punto de extensi\u00f3n correcto.<\/p>\n<p>Esta distinci\u00f3n importa porque las diferentes extensiones conllevan diferentes costos de mantenimiento. Un peque\u00f1o m\u00f3dulo de funciones auxiliares suele ser estable, f\u00e1cil de probar y f\u00e1cil de entender para los colaboradores. Una modificaci\u00f3n estructural m\u00e1s profunda puede ser apropiada en casos avanzados, pero tambi\u00e9n aumenta la posibilidad de ocultar una f\u00edsica importante detr\u00e1s de abstracciones que son m\u00e1s dif\u00edciles de inspeccionar. En computaci\u00f3n cient\u00edfica, la legibilidad es parte de la fiabilidad. Si otro investigador no puede ver r\u00e1pidamente c\u00f3mo se construye un t\u00e9rmino, su arquitectura puede ser demasiado inteligente para su propio bien.<\/p>\n<p>El mejor primer paso, entonces, es no preguntar: \u00ab\u00bfC\u00f3mo puedo subclasar m\u00e1s a Fipy?\u00bb Pero m\u00e1s bien, \u201c\u00bfQu\u00e9 parte de mi flujo de trabajo num\u00e9rico se repite con la frecuencia suficiente para merecer su propio m\u00f3dulo?\u201d Esa pregunta generalmente conduce a un dise\u00f1o m\u00e1s limpio y mantenible.<\/p>\n<h2>Entender los objetos fipy centrales antes de modularlos<\/h2>\n<p>Cualquier extensi\u00f3n reutilizable funciona mejor cuando respeta la estructura central de Fipy. La mayor\u00eda de los proyectos giran en torno a unos pocos objetos clave: la malla, las variables, los t\u00e9rminos, las ecuaciones ensambladas y el bucle de resoluci\u00f3n o barrido. Los m\u00f3dulos personalizados deber\u00edan hacer que estos objetos sean m\u00e1s f\u00e1ciles de administrar, no m\u00e1s dif\u00edciles de localizar. Por ejemplo, un m\u00f3dulo de malla puede devolver una cuadr\u00edcula est\u00e1ndar o una familia de geometr\u00edas con dimensiones parametrizadas. Un m\u00f3dulo de variables puede manejar la inicializaci\u00f3n, las actualizaciones de valor antiguo y los estados de campo predeterminados. Un m\u00f3dulo de f\u00edsica podr\u00eda definir coeficientes de difusi\u00f3n, respuestas materiales o expresiones de origen. Luego, un m\u00f3dulo de ecuaciones puede ensamblar esas piezas en un PDE o en un sistema acoplado.<\/p>\n<p>Esta estructura tambi\u00e9n ayuda porque Fipy distingue cuidadosamente entre diferentes tipos de datos de campo. En muchos flujos de trabajo, las cantidades dependientes viven en las celdas, mientras que otras operaciones se expresan naturalmente en las caras. Si un m\u00f3dulo personalizado desdibuja esa distinci\u00f3n descuidadamente, es posible que el c\u00f3digo a\u00fan se ejecute, pero el resultado puede volverse confuso num\u00e9ricamente. Eso es especialmente cierto cuando se trata de expresiones no lineales, gradientes o coeficientes basados en la cara. Por lo tanto, una buena capa de extensi\u00f3n debe preservar el significado matem\u00e1tico de los objetos subyacentes en lugar de esconderlos detr\u00e1s de los nombres de ayuda vagos.<\/p>\n<p>En otras palabras, un m\u00f3dulo personalizado deber\u00eda reducir la repetici\u00f3n sin debilitar la comprensi\u00f3n del usuario de d\u00f3nde vive realmente la f\u00edsica discretizada.<\/p>\n<h2>Use los m\u00f3dulos de utilidad primero, no la herencia profunda<\/h2>\n<p>Para muchos proyectos de Fipy, la forma m\u00e1s segura y productiva de ampliar el marco es crear m\u00f3dulos de Python simples alrededor de los objetos Fipy est\u00e1ndar. Este enfoque es mucho m\u00e1s pr\u00e1ctico que la herencia profunda para la mayor\u00eda de los usuarios. Mantiene su c\u00f3digo cerca de los patrones fipy documentados, facilita las actualizaciones y reduce el riesgo de introducir un comportamiento fr\u00e1gil que solo una persona en el equipo entiende.<\/p>\n<p>Una estrategia de extensi\u00f3n basada en servicios p\u00fablicos puede incluir un m\u00f3dulo para la generaci\u00f3n de geometr\u00eda y malla, otro para la carga de par\u00e1metros, otro para las propiedades del material y otro para la construcci\u00f3n de PDE. En lugar de llenar todo esto en un script, dejas que cada archivo tenga una capa de responsabilidad. Luego, su script de ejecuci\u00f3n se convierte en una capa de orquestaci\u00f3n clara: compilar malla, inicializar variables, construir ecuaciones, resolver pasos de tiempo y exportar resultados.<\/p>\n<p>Este estilo tiene otra ventaja: refleja la forma en que la gente realmente piensa sobre los modelos cient\u00edficos. Los investigadores generalmente separan el dominio del problema en conceptos como geometr\u00eda, campos, comportamiento constitutivo, formulaci\u00f3n num\u00e9rica y configuraci\u00f3n de experimentos. Si la estructura de su proyecto sigue esa l\u00f3gica, el c\u00f3digo se vuelve m\u00e1s natural de revisar y extender. Eso es a menudo m\u00e1s valioso que cualquier truco de dise\u00f1o orientado a objetos.<\/p>\n<h2>Construir constructores de ecuaciones reutilizables<\/h2>\n<p>Uno de los usos m\u00e1s fuertes de los m\u00f3dulos personalizados en FIPY es el ensamblaje de la ecuaci\u00f3n de empaquetado en constructores reutilizables. Esto es especialmente \u00fatil una vez que su proyecto contiene varias variantes del mismo modelo de gobierno. En lugar de reescribir el PDE en cada script, define una funci\u00f3n o clase que toma las variables y coeficientes necesarios y devuelve una ecuaci\u00f3n lista para resolver. Eso mejora instant\u00e1neamente la coherencia entre las ejecuciones y reduce la posibilidad de cambiar silenciosamente un t\u00e9rmino en un archivo mientras se olvida de actualizar otro.<\/p>\n<p>Un simple generador de ecuaciones podr\u00eda aceptar una variable, un coeficiente de difusi\u00f3n, un coeficiente transitorio y una expresi\u00f3n de origen. Un uno m\u00e1s avanzado podr\u00eda cambiar el comportamiento dependiendo de si la convecci\u00f3n est\u00e1 activa, si la fuente es expl\u00edcita o semi-implicita, o si la ejecuci\u00f3n actual depende del estado o del tiempo. En el trabajo multif\u00edsico, un constructor puede devolver m\u00faltiples ecuaciones a la vez y ensamblar un sistema acoplado en un solo lugar en lugar de dispersar esas relaciones en un cuaderno o en varios scripts.<\/p>\n<p>Este dise\u00f1o se vuelve a\u00fan m\u00e1s importante cuando varias personas trabajan en el mismo modelo. Si una persona est\u00e1 refinando los coeficientes mientras que otra est\u00e1 ajustando los tiempos de tiempo o los ajustes del solucionador, un generador de ecuaciones compartida ayuda a mantener el n\u00facleo matem\u00e1tico estable y visible. El punto no es s\u00f3lo la conveniencia. Es disciplina num\u00e9rica.<\/p>\n<h2>Hacer l\u00f3gica de t\u00e9rmino fuente modular y expl\u00edcito<\/h2>\n<p>El manejo de fuentes personalizados es una de las razones m\u00e1s comunes por las que las personas necesitan extender Fipy. En muchos modelos de PDE, el t\u00e9rmino fuente es donde vive la f\u00edsica m\u00e1s espec\u00edfica del problema. Puede incluir comportamiento de reacci\u00f3n no lineal, acoplamiento de fase, funciones de forzamiento, dependencia de la temperatura o inyecciones y sumideros espec\u00edficos de escenarios. Si esta l\u00f3gica permanece incrustada directamente dentro del script de ejecuci\u00f3n, r\u00e1pidamente se vuelve dif\u00edcil de probar e incluso m\u00e1s dif\u00edcil de reutilizar.<\/p>\n<p>Un enfoque mucho mejor es aislar la construcci\u00f3n de fuentes en su propio m\u00f3dulo. Este m\u00f3dulo puede exponer un peque\u00f1o conjunto de constructores con nombre claro, como una funci\u00f3n de origen expl\u00edcita, una f\u00e1brica de fuentes semi-implicitas o un ayudante que divide una expresi\u00f3n no lineal en piezas expl\u00edcitas e impl\u00edcitas. Eso importa porque Fipy puede beneficiarse de la linealizaci\u00f3n de la parte de una fuente que depende de la variable que se est\u00e1 resolviendo. Cuando se hace bien, esto a menudo mejora la convergencia y mantiene el modelo num\u00e9ricamente m\u00e1s estable.<\/p>\n<p>Este es tambi\u00e9n el punto donde la disciplina con las expresiones matem\u00e1ticas se vuelve importante. En los flujos de trabajo de Fipy, las expresiones de origen que act\u00faan en las variables fipy generalmente deber\u00edan usar `fipy.tools.numerix` en lugar de asumir que las llamadas numpy o scipy equivalentes se comportar\u00e1n de la misma manera. Por lo tanto, un m\u00f3dulo fuente es un buen lugar para centralizar esa pr\u00e1ctica. Al hacerlo, haces que tanto la f\u00edsica como las reglas de implementaci\u00f3n sean m\u00e1s consistentes en todo el proyecto.<\/p>\n<h2>Maneja con cuidado la celda y la l\u00f3gica de la cara<\/h2>\n<p>Algunos de los errores m\u00e1s frustrantes en los proyectos personalizados de Fipy provienen de ocultar la diferencia entre las cantidades basadas en celdas y basadas en caras. Es tentador crear un c\u00f3digo auxiliar gen\u00e9rico que \u00absolo devuelve un coeficiente\u00bb sin dejar completamente clara su ubicaci\u00f3n en la discretizaci\u00f3n. Ese atajo puede parecer elegante, pero a menudo hace que el modelo sea m\u00e1s dif\u00edcil de razonar m\u00e1s adelante, especialmente cuando se trata de gradientes, anisotrop\u00eda, coeficientes no lineales o interpolaciones faciales.<\/p>\n<p>Por lo tanto, los m\u00f3dulos personalizados deben ser expl\u00edcitos sobre lo que devuelven. Si un coeficiente pertenece a las caras, el nombre de la funci\u00f3n y la documentaci\u00f3n deben decirlo. Si un ayudante convierte una cantidad de celda en una representaci\u00f3n faceta, esa transformaci\u00f3n debe ser visible e intencional. Esto no es simplemente una cuesti\u00f3n de estilo. En el trabajo de volumen finito, la ubicaci\u00f3n e interpretaci\u00f3n de un campo afecta tanto a la correcci\u00f3n como a la legibilidad del modelo num\u00e9rico.<\/p>\n<p>La misma precauci\u00f3n se aplica cuando se basa en convenientes conversiones autom\u00e1ticas. A veces esas comodidades son \u00fatiles, pero no deber\u00edan convertirse en magia invisible dentro de un m\u00f3dulo reutilizable. Un buen c\u00f3digo cient\u00edfico favorece la expl\u00edcita cuando el significado matem\u00e1tico importa.<\/p>\n<h2>Modularizar modelos acoplados antes de que se vuelvan ca\u00f3ticos<\/h2>\n<p>A medida que los modelos fibrosos se vuelven m\u00e1s avanzados, las ecuaciones acopladas suelen ser el lugar donde la estructura del proyecto tiene \u00e9xito o colapsa. Un sistema acoplado puede permanecer legible si cada relaci\u00f3n f\u00edsica se define de manera controlada, pero se ensucia muy r\u00e1pidamente cuando se ensamblan piezas de ecuaciones m\u00faltiples en diferentes ubicaciones del c\u00f3digo. Esta es la raz\u00f3n por la que los modelos acoplados se benefician tanto de los m\u00f3dulos personalizados.<\/p>\n<p>Un dise\u00f1o limpio podr\u00eda colocar cada submodelo en su propio archivo: uno para el transporte, uno para la reacci\u00f3n, uno para la energ\u00eda, uno para el comportamiento de fase y el para los coeficientes compartidos. Luego, un generador de ecuaci\u00f3n acoplado central importa esas piezas y ensambla el sistema en un orden consistente. Esto reduce el riesgo de cableado de las variables incorrectamente y hace que el proyecto sea m\u00e1s f\u00e1cil de extender cuando se agrega un tercer o cuarto campo posteriormente.<\/p>\n<p>Tambi\u00e9n ayuda con una de las realidades m\u00e1s pr\u00e1cticas del trabajo acoplado: la experimentaci\u00f3n. Es posible que deba comparar una soluci\u00f3n monol\u00edtica con una aproximaci\u00f3n m\u00e1s flexible, cambiar un t\u00e9rmino constitutivo por otro o reestructurar un modelo para evitar limitaciones en la forma en que interact\u00faan ciertos t\u00e9rminos. Un dise\u00f1o modular facilita esos cambios porque la l\u00f3gica de acoplamiento est\u00e1 centralizada en lugar de enterrada dentro del c\u00f3digo procesal repetido.<\/p>\n<h2>Organice el proyecto como un paquete de simulaci\u00f3n, no como un script de demostraci\u00f3n<\/h2>\n<p>Si su trabajo fibroso va m\u00e1s all\u00e1 de los experimentos \u00fanicos, la estructura general del paquete importa casi tanto como los t\u00e9rminos PDE. Un dise\u00f1o simple y efectivo a menudo incluye ubicaciones separadas para mallas, variables, l\u00f3gica f\u00edsica, creadores de ecuaciones, scripts de ejecuci\u00f3n, procesamiento posterior y pruebas. Esto no necesita ser elaborado, pero deber\u00eda hacer obvio a d\u00f3nde pertenece cada tipo de l\u00f3gica.<\/p>\n<p>Esa organizaci\u00f3n cambia el papel del script de nivel superior. En lugar de ser un archivo gigante que define todo, se convierte en un punto de entrada controlado para un caso de simulaci\u00f3n. Importa una malla, carga par\u00e1metros, inicializa variables, construye ecuaciones, avanza la soluci\u00f3n y escribe salidas. Eso es mucho m\u00e1s f\u00e1cil de revisar, mucho m\u00e1s f\u00e1cil de volver a ejecutar con diferentes configuraciones y mucho m\u00e1s f\u00e1cil de convertir en estudios por lotes o barridos de par\u00e1metros m\u00e1s adelante.<\/p>\n<p>Un proyecto Fipy bien estructurado tambi\u00e9n simplifica la documentaci\u00f3n. Cada m\u00f3dulo puede explicar una responsabilidad en lugar de obligar a los lectores a navegar un solo archivo largo lleno de preocupaciones mixtas. En entornos de investigaci\u00f3n, ese es un beneficio pr\u00e1ctico, no cosm\u00e9tico.<\/p>\n<h2>Prueba de m\u00f3dulos personalizados en capas<\/h2>\n<p>Una vez que el c\u00f3digo FIPY se divide en m\u00f3dulos, las pruebas se vuelven mucho m\u00e1s manejables. Eso importa porque los proyectos num\u00e9ricos fallan de diferentes maneras que el c\u00f3digo de aplicaci\u00f3n ordinario. Un m\u00f3dulo puede importar correctamente y a\u00fan codificar la f\u00edsica incorrecta. Un generador de fuentes puede ejecutarse sin errores y a\u00fan as\u00ed producir un comportamiento inestable bajo refinamiento. Una ecuaci\u00f3n acoplada puede ensamblarse con \u00e9xito pero colocar un t\u00e9rmino en la variable incorrecta.<\/p>\n<p>El mejor enfoque es la prueba en capas. Las peque\u00f1as funciones auxiliares deben tener pruebas locales cuando sea posible. Los constructores de ecuaciones deben verificarse en peque\u00f1os problemas de referencia antes de que se conf\u00ede en ejecuciones m\u00e1s grandes. Los flujos de trabajo de simulaci\u00f3n completos tambi\u00e9n deben tener pruebas de estilo de regresi\u00f3n, incluso si esas pruebas son simples, como verificar si una tendencia residual, un patr\u00f3n de simetr\u00eda, una cantidad conservada o una estad\u00edstica de campo final dentro de un rango esperado.<\/p>\n<p>Este estilo de prueba coincide con la l\u00f3gica de la buena computaci\u00f3n cient\u00edfica. No solo quieres c\u00f3digo que se ejecute. Desea un c\u00f3digo cuyo comportamiento sigue siendo interpretable a medida que evoluciona el modelo. Los m\u00f3dulos personalizados lo hacen m\u00e1s f\u00e1cil porque a\u00edslan las responsabilidades; Luego, las pruebas dan a esas responsabilidades un contrato estable.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Extender Fipy con m\u00f3dulos personalizados se trata menos de hacer que el marco sea m\u00e1s complicado y m\u00e1s de hacer que su propio PDE funcione m\u00e1s. Las mejores extensiones suelen ser las que aclaran el modelo: m\u00f3dulos de utilidad que reducen la repetici\u00f3n, constructores de ecuaciones que centralizan la formulaci\u00f3n, ayudantes de t\u00e9rmino fuente que mantienen expl\u00edcita la f\u00edsica no lineal y estructuras de paquete que separan la definici\u00f3n del problema de la ejecuci\u00f3n. A medida que los modelos se hacen m\u00e1s grandes, esta modularidad deja de ser opcional y comienza a convertirse en una de las principales salvaguardas contra la confusi\u00f3n num\u00e9rica.<\/p>\n<p>La regla pr\u00e1ctica es simple. empezar superficial. Modularizar lo que se repite. Mantenga la f\u00edsica visible. Agregue una abstracci\u00f3n m\u00e1s profunda solo cuando mejore claramente la reutilizaci\u00f3n o la estabilidad. Si sigue ese patr\u00f3n, los m\u00f3dulos Fipy personalizados se convierten en m\u00e1s que una comodidad de programaci\u00f3n. Se convierten en parte de la forma en que haces que un proyecto de simulaci\u00f3n sea legible, comprobable y que valga la pena extender con el tiempo.<\/p>\n","protected":false,"raw":"<p>Fipy es m\u00e1s \u00fatil cuando deja de tratarlo como una colecci\u00f3n de scripts de ejemplo aislados y comienza a usarlo como un marco flexible para crear sus propios flujos de trabajo PDE. Ese cambio importa porque los proyectos de simulaci\u00f3n reales rara vez permanecen simples por mucho tiempo. Un modelo que comienza como una ecuaci\u00f3n en una malla a menudo se convierte en un sistema con propiedades de material reutilizables, t\u00e9rminos de origen no lineal, campos acoplados, par\u00e1metros espec\u00edficos de escenario y pasos de postprocesamiento repetidos. En ese momento, mantener todo dentro de un script en expansi\u00f3n generalmente hace que el c\u00f3digo sea m\u00e1s dif\u00edcil de depurar, m\u00e1s dif\u00edcil de confiar y mucho m\u00e1s dif\u00edcil de reutilizar.<\/p>\n<p>Ah\u00ed es donde los m\u00f3dulos personalizados se vuelven valiosos. En Fipy, extender el marco no siempre significa reescribir internos o crear jerarqu\u00edas de clase profunda. Muy a menudo, la extensi\u00f3n m\u00e1s efectiva es un m\u00f3dulo de Python limpio que organiza una parte del modelo num\u00e9rico: creaci\u00f3n de mallas, configuraci\u00f3n variable, l\u00f3gica de coeficiente, ensamblaje de ecuaci\u00f3n, manejo de fuente, control del solucionador o rutinas de salida. El objetivo no es hacer que el proyecto sea m\u00e1s abstracto por s\u00ed mismo. El objetivo es hacer que el modelo matem\u00e1tico sea m\u00e1s f\u00e1cil de leer, probar, modificar y ejecutar en varios casos.<\/p>\n<p>Una buena estrategia de extensi\u00f3n de Fipy comienza con una pregunta pr\u00e1ctica: \u00bfqu\u00e9 necesita ser exactamente reutilizable? A veces, la respuesta es un generador de fuentes personalizado. A veces es una f\u00e1brica de ecuaci\u00f3n acoplada. A veces es simplemente una estructura de paquetes que separa la f\u00edsica de los scripts de lanzamiento. Una vez que est\u00e1 claro, Fipy se vuelve mucho m\u00e1s f\u00e1cil de escalar sin perder claridad.<\/p>\n<h2>Comience identificando el punto de extensi\u00f3n correcto<\/h2>\n<p>El mayor error que cometen las personas al extender Fipy es asumir que cada patr\u00f3n repetido requiere una clase personalizada de bajo nivel. En la pr\u00e1ctica, muchos problemas pueden resolverse con un enfoque mucho m\u00e1s ligero. Si sigue reescribiendo la misma configuraci\u00f3n para una malla, condiciones iniciales, restricciones de l\u00edmite o coeficientes, es posible que solo necesite un m\u00f3dulo de utilidad. Si su principal dificultad es construir la misma familia de ecuaciones bajo diferentes opciones de par\u00e1metros, probablemente necesite un generador de ecuaciones. Si su modelo incluye un comportamiento de origen no lineal que aparece en varios casos, un auxiliar de t\u00e9rmino fuente puede ser el punto de extensi\u00f3n correcto.<\/p>\n<p>Esta distinci\u00f3n importa porque las diferentes extensiones conllevan diferentes costos de mantenimiento. Un peque\u00f1o m\u00f3dulo de funciones auxiliares suele ser estable, f\u00e1cil de probar y f\u00e1cil de entender para los colaboradores. Una modificaci\u00f3n estructural m\u00e1s profunda puede ser apropiada en casos avanzados, pero tambi\u00e9n aumenta la posibilidad de ocultar una f\u00edsica importante detr\u00e1s de abstracciones que son m\u00e1s dif\u00edciles de inspeccionar. En computaci\u00f3n cient\u00edfica, la legibilidad es parte de la fiabilidad. Si otro investigador no puede ver r\u00e1pidamente c\u00f3mo se construye un t\u00e9rmino, su arquitectura puede ser demasiado inteligente para su propio bien.<\/p>\n<p>El mejor primer paso, entonces, es no preguntar: \"\u00bfC\u00f3mo puedo subclasar m\u00e1s a Fipy?\" Pero m\u00e1s bien, \u201c\u00bfQu\u00e9 parte de mi flujo de trabajo num\u00e9rico se repite con la frecuencia suficiente para merecer su propio m\u00f3dulo?\u201d Esa pregunta generalmente conduce a un dise\u00f1o m\u00e1s limpio y mantenible.<\/p>\n<h2>Entender los objetos fipy centrales antes de modularlos<\/h2>\n<p>Cualquier extensi\u00f3n reutilizable funciona mejor cuando respeta la estructura central de Fipy. La mayor\u00eda de los proyectos giran en torno a unos pocos objetos clave: la malla, las variables, los t\u00e9rminos, las ecuaciones ensambladas y el bucle de resoluci\u00f3n o barrido. Los m\u00f3dulos personalizados deber\u00edan hacer que estos objetos sean m\u00e1s f\u00e1ciles de administrar, no m\u00e1s dif\u00edciles de localizar. Por ejemplo, un m\u00f3dulo de malla puede devolver una cuadr\u00edcula est\u00e1ndar o una familia de geometr\u00edas con dimensiones parametrizadas. Un m\u00f3dulo de variables puede manejar la inicializaci\u00f3n, las actualizaciones de valor antiguo y los estados de campo predeterminados. Un m\u00f3dulo de f\u00edsica podr\u00eda definir coeficientes de difusi\u00f3n, respuestas materiales o expresiones de origen. Luego, un m\u00f3dulo de ecuaciones puede ensamblar esas piezas en un PDE o en un sistema acoplado.<\/p>\n<p>Esta estructura tambi\u00e9n ayuda porque Fipy distingue cuidadosamente entre diferentes tipos de datos de campo. En muchos flujos de trabajo, las cantidades dependientes viven en las celdas, mientras que otras operaciones se expresan naturalmente en las caras. Si un m\u00f3dulo personalizado desdibuja esa distinci\u00f3n descuidadamente, es posible que el c\u00f3digo a\u00fan se ejecute, pero el resultado puede volverse confuso num\u00e9ricamente. Eso es especialmente cierto cuando se trata de expresiones no lineales, gradientes o coeficientes basados en la cara. Por lo tanto, una buena capa de extensi\u00f3n debe preservar el significado matem\u00e1tico de los objetos subyacentes en lugar de esconderlos detr\u00e1s de los nombres de ayuda vagos.<\/p>\n<p>En otras palabras, un m\u00f3dulo personalizado deber\u00eda reducir la repetici\u00f3n sin debilitar la comprensi\u00f3n del usuario de d\u00f3nde vive realmente la f\u00edsica discretizada.<\/p>\n<h2>Use los m\u00f3dulos de utilidad primero, no la herencia profunda<\/h2>\n<p>Para muchos proyectos de Fipy, la forma m\u00e1s segura y productiva de ampliar el marco es crear m\u00f3dulos de Python simples alrededor de los objetos Fipy est\u00e1ndar. Este enfoque es mucho m\u00e1s pr\u00e1ctico que la herencia profunda para la mayor\u00eda de los usuarios. Mantiene su c\u00f3digo cerca de los patrones fipy documentados, facilita las actualizaciones y reduce el riesgo de introducir un comportamiento fr\u00e1gil que solo una persona en el equipo entiende.<\/p>\n<p>Una estrategia de extensi\u00f3n basada en servicios p\u00fablicos puede incluir un m\u00f3dulo para la generaci\u00f3n de geometr\u00eda y malla, otro para la carga de par\u00e1metros, otro para las propiedades del material y otro para la construcci\u00f3n de PDE. En lugar de llenar todo esto en un script, dejas que cada archivo tenga una capa de responsabilidad. Luego, su script de ejecuci\u00f3n se convierte en una capa de orquestaci\u00f3n clara: compilar malla, inicializar variables, construir ecuaciones, resolver pasos de tiempo y exportar resultados.<\/p>\n<p>Este estilo tiene otra ventaja: refleja la forma en que la gente realmente piensa sobre los modelos cient\u00edficos. Los investigadores generalmente separan el dominio del problema en conceptos como geometr\u00eda, campos, comportamiento constitutivo, formulaci\u00f3n num\u00e9rica y configuraci\u00f3n de experimentos. Si la estructura de su proyecto sigue esa l\u00f3gica, el c\u00f3digo se vuelve m\u00e1s natural de revisar y extender. Eso es a menudo m\u00e1s valioso que cualquier truco de dise\u00f1o orientado a objetos.<\/p>\n<h2>Construir constructores de ecuaciones reutilizables<\/h2>\n<p>Uno de los usos m\u00e1s fuertes de los m\u00f3dulos personalizados en FIPY es el ensamblaje de la ecuaci\u00f3n de empaquetado en constructores reutilizables. Esto es especialmente \u00fatil una vez que su proyecto contiene varias variantes del mismo modelo de gobierno. En lugar de reescribir el PDE en cada script, define una funci\u00f3n o clase que toma las variables y coeficientes necesarios y devuelve una ecuaci\u00f3n lista para resolver. Eso mejora instant\u00e1neamente la coherencia entre las ejecuciones y reduce la posibilidad de cambiar silenciosamente un t\u00e9rmino en un archivo mientras se olvida de actualizar otro.<\/p>\n<p>Un simple generador de ecuaciones podr\u00eda aceptar una variable, un coeficiente de difusi\u00f3n, un coeficiente transitorio y una expresi\u00f3n de origen. Un uno m\u00e1s avanzado podr\u00eda cambiar el comportamiento dependiendo de si la convecci\u00f3n est\u00e1 activa, si la fuente es expl\u00edcita o semi-implicita, o si la ejecuci\u00f3n actual depende del estado o del tiempo. En el trabajo multif\u00edsico, un constructor puede devolver m\u00faltiples ecuaciones a la vez y ensamblar un sistema acoplado en un solo lugar en lugar de dispersar esas relaciones en un cuaderno o en varios scripts.<\/p>\n<p>Este dise\u00f1o se vuelve a\u00fan m\u00e1s importante cuando varias personas trabajan en el mismo modelo. Si una persona est\u00e1 refinando los coeficientes mientras que otra est\u00e1 ajustando los tiempos de tiempo o los ajustes del solucionador, un generador de ecuaciones compartida ayuda a mantener el n\u00facleo matem\u00e1tico estable y visible. El punto no es s\u00f3lo la conveniencia. Es disciplina num\u00e9rica.<\/p>\n<h2>Hacer l\u00f3gica de t\u00e9rmino fuente modular y expl\u00edcito<\/h2>\n<p>El manejo de fuentes personalizados es una de las razones m\u00e1s comunes por las que las personas necesitan extender Fipy. En muchos modelos de PDE, el t\u00e9rmino fuente es donde vive la f\u00edsica m\u00e1s espec\u00edfica del problema. Puede incluir comportamiento de reacci\u00f3n no lineal, acoplamiento de fase, funciones de forzamiento, dependencia de la temperatura o inyecciones y sumideros espec\u00edficos de escenarios. Si esta l\u00f3gica permanece incrustada directamente dentro del script de ejecuci\u00f3n, r\u00e1pidamente se vuelve dif\u00edcil de probar e incluso m\u00e1s dif\u00edcil de reutilizar.<\/p>\n<p>Un enfoque mucho mejor es aislar la construcci\u00f3n de fuentes en su propio m\u00f3dulo. Este m\u00f3dulo puede exponer un peque\u00f1o conjunto de constructores con nombre claro, como una funci\u00f3n de origen expl\u00edcita, una f\u00e1brica de fuentes semi-implicitas o un ayudante que divide una expresi\u00f3n no lineal en piezas expl\u00edcitas e impl\u00edcitas. Eso importa porque Fipy puede beneficiarse de la linealizaci\u00f3n de la parte de una fuente que depende de la variable que se est\u00e1 resolviendo. Cuando se hace bien, esto a menudo mejora la convergencia y mantiene el modelo num\u00e9ricamente m\u00e1s estable.<\/p>\n<p>Este es tambi\u00e9n el punto donde la disciplina con las expresiones matem\u00e1ticas se vuelve importante. En los flujos de trabajo de Fipy, las expresiones de origen que act\u00faan en las variables fipy generalmente deber\u00edan usar `fipy.tools.numerix` en lugar de asumir que las llamadas numpy o scipy equivalentes se comportar\u00e1n de la misma manera. Por lo tanto, un m\u00f3dulo fuente es un buen lugar para centralizar esa pr\u00e1ctica. Al hacerlo, haces que tanto la f\u00edsica como las reglas de implementaci\u00f3n sean m\u00e1s consistentes en todo el proyecto.<\/p>\n<h2>Maneja con cuidado la celda y la l\u00f3gica de la cara<\/h2>\n<p>Algunos de los errores m\u00e1s frustrantes en los proyectos personalizados de Fipy provienen de ocultar la diferencia entre las cantidades basadas en celdas y basadas en caras. Es tentador crear un c\u00f3digo auxiliar gen\u00e9rico que \"solo devuelve un coeficiente\" sin dejar completamente clara su ubicaci\u00f3n en la discretizaci\u00f3n. Ese atajo puede parecer elegante, pero a menudo hace que el modelo sea m\u00e1s dif\u00edcil de razonar m\u00e1s adelante, especialmente cuando se trata de gradientes, anisotrop\u00eda, coeficientes no lineales o interpolaciones faciales.<\/p>\n<p>Por lo tanto, los m\u00f3dulos personalizados deben ser expl\u00edcitos sobre lo que devuelven. Si un coeficiente pertenece a las caras, el nombre de la funci\u00f3n y la documentaci\u00f3n deben decirlo. Si un ayudante convierte una cantidad de celda en una representaci\u00f3n faceta, esa transformaci\u00f3n debe ser visible e intencional. Esto no es simplemente una cuesti\u00f3n de estilo. En el trabajo de volumen finito, la ubicaci\u00f3n e interpretaci\u00f3n de un campo afecta tanto a la correcci\u00f3n como a la legibilidad del modelo num\u00e9rico.<\/p>\n<p>La misma precauci\u00f3n se aplica cuando se basa en convenientes conversiones autom\u00e1ticas. A veces esas comodidades son \u00fatiles, pero no deber\u00edan convertirse en magia invisible dentro de un m\u00f3dulo reutilizable. Un buen c\u00f3digo cient\u00edfico favorece la expl\u00edcita cuando el significado matem\u00e1tico importa.<\/p>\n<h2>Modularizar modelos acoplados antes de que se vuelvan ca\u00f3ticos<\/h2>\n<p>A medida que los modelos fibrosos se vuelven m\u00e1s avanzados, las ecuaciones acopladas suelen ser el lugar donde la estructura del proyecto tiene \u00e9xito o colapsa. Un sistema acoplado puede permanecer legible si cada relaci\u00f3n f\u00edsica se define de manera controlada, pero se ensucia muy r\u00e1pidamente cuando se ensamblan piezas de ecuaciones m\u00faltiples en diferentes ubicaciones del c\u00f3digo. Esta es la raz\u00f3n por la que los modelos acoplados se benefician tanto de los m\u00f3dulos personalizados.<\/p>\n<p>Un dise\u00f1o limpio podr\u00eda colocar cada submodelo en su propio archivo: uno para el transporte, uno para la reacci\u00f3n, uno para la energ\u00eda, uno para el comportamiento de fase y el para los coeficientes compartidos. Luego, un generador de ecuaci\u00f3n acoplado central importa esas piezas y ensambla el sistema en un orden consistente. Esto reduce el riesgo de cableado de las variables incorrectamente y hace que el proyecto sea m\u00e1s f\u00e1cil de extender cuando se agrega un tercer o cuarto campo posteriormente.<\/p>\n<p>Tambi\u00e9n ayuda con una de las realidades m\u00e1s pr\u00e1cticas del trabajo acoplado: la experimentaci\u00f3n. Es posible que deba comparar una soluci\u00f3n monol\u00edtica con una aproximaci\u00f3n m\u00e1s flexible, cambiar un t\u00e9rmino constitutivo por otro o reestructurar un modelo para evitar limitaciones en la forma en que interact\u00faan ciertos t\u00e9rminos. Un dise\u00f1o modular facilita esos cambios porque la l\u00f3gica de acoplamiento est\u00e1 centralizada en lugar de enterrada dentro del c\u00f3digo procesal repetido.<\/p>\n<h2>Organice el proyecto como un paquete de simulaci\u00f3n, no como un script de demostraci\u00f3n<\/h2>\n<p>Si su trabajo fibroso va m\u00e1s all\u00e1 de los experimentos \u00fanicos, la estructura general del paquete importa casi tanto como los t\u00e9rminos PDE. Un dise\u00f1o simple y efectivo a menudo incluye ubicaciones separadas para mallas, variables, l\u00f3gica f\u00edsica, creadores de ecuaciones, scripts de ejecuci\u00f3n, procesamiento posterior y pruebas. Esto no necesita ser elaborado, pero deber\u00eda hacer obvio a d\u00f3nde pertenece cada tipo de l\u00f3gica.<\/p>\n<p>Esa organizaci\u00f3n cambia el papel del script de nivel superior. En lugar de ser un archivo gigante que define todo, se convierte en un punto de entrada controlado para un caso de simulaci\u00f3n. Importa una malla, carga par\u00e1metros, inicializa variables, construye ecuaciones, avanza la soluci\u00f3n y escribe salidas. Eso es mucho m\u00e1s f\u00e1cil de revisar, mucho m\u00e1s f\u00e1cil de volver a ejecutar con diferentes configuraciones y mucho m\u00e1s f\u00e1cil de convertir en estudios por lotes o barridos de par\u00e1metros m\u00e1s adelante.<\/p>\n<p>Un proyecto Fipy bien estructurado tambi\u00e9n simplifica la documentaci\u00f3n. Cada m\u00f3dulo puede explicar una responsabilidad en lugar de obligar a los lectores a navegar un solo archivo largo lleno de preocupaciones mixtas. En entornos de investigaci\u00f3n, ese es un beneficio pr\u00e1ctico, no cosm\u00e9tico.<\/p>\n<h2>Prueba de m\u00f3dulos personalizados en capas<\/h2>\n<p>Una vez que el c\u00f3digo FIPY se divide en m\u00f3dulos, las pruebas se vuelven mucho m\u00e1s manejables. Eso importa porque los proyectos num\u00e9ricos fallan de diferentes maneras que el c\u00f3digo de aplicaci\u00f3n ordinario. Un m\u00f3dulo puede importar correctamente y a\u00fan codificar la f\u00edsica incorrecta. Un generador de fuentes puede ejecutarse sin errores y a\u00fan as\u00ed producir un comportamiento inestable bajo refinamiento. Una ecuaci\u00f3n acoplada puede ensamblarse con \u00e9xito pero colocar un t\u00e9rmino en la variable incorrecta.<\/p>\n<p>El mejor enfoque es la prueba en capas. Las peque\u00f1as funciones auxiliares deben tener pruebas locales cuando sea posible. Los constructores de ecuaciones deben verificarse en peque\u00f1os problemas de referencia antes de que se conf\u00ede en ejecuciones m\u00e1s grandes. Los flujos de trabajo de simulaci\u00f3n completos tambi\u00e9n deben tener pruebas de estilo de regresi\u00f3n, incluso si esas pruebas son simples, como verificar si una tendencia residual, un patr\u00f3n de simetr\u00eda, una cantidad conservada o una estad\u00edstica de campo final dentro de un rango esperado.<\/p>\n<p>Este estilo de prueba coincide con la l\u00f3gica de la buena computaci\u00f3n cient\u00edfica. No solo quieres c\u00f3digo que se ejecute. Desea un c\u00f3digo cuyo comportamiento sigue siendo interpretable a medida que evoluciona el modelo. Los m\u00f3dulos personalizados lo hacen m\u00e1s f\u00e1cil porque a\u00edslan las responsabilidades; Luego, las pruebas dan a esas responsabilidades un contrato estable.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Extender Fipy con m\u00f3dulos personalizados se trata menos de hacer que el marco sea m\u00e1s complicado y m\u00e1s de hacer que su propio PDE funcione m\u00e1s. Las mejores extensiones suelen ser las que aclaran el modelo: m\u00f3dulos de utilidad que reducen la repetici\u00f3n, constructores de ecuaciones que centralizan la formulaci\u00f3n, ayudantes de t\u00e9rmino fuente que mantienen expl\u00edcita la f\u00edsica no lineal y estructuras de paquete que separan la definici\u00f3n del problema de la ejecuci\u00f3n. A medida que los modelos se hacen m\u00e1s grandes, esta modularidad deja de ser opcional y comienza a convertirse en una de las principales salvaguardas contra la confusi\u00f3n num\u00e9rica.<\/p>\n<p>La regla pr\u00e1ctica es simple. empezar superficial. Modularizar lo que se repite. Mantenga la f\u00edsica visible. Agregue una abstracci\u00f3n m\u00e1s profunda solo cuando mejore claramente la reutilizaci\u00f3n o la estabilidad. Si sigue ese patr\u00f3n, los m\u00f3dulos Fipy personalizados se convierten en m\u00e1s que una comodidad de programaci\u00f3n. Se convierten en parte de la forma en que haces que un proyecto de simulaci\u00f3n sea legible, comprobable y que valga la pena extender con el tiempo.<\/p>\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\"> 9<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Fipy es m\u00e1s \u00fatil cuando deja de tratarlo como una colecci\u00f3n de scripts de ejemplo aislados y comienza a usarlo como un marco flexible para crear sus propios flujos de trabajo PDE. Ese cambio importa porque los proyectos de simulaci\u00f3n reales rara vez permanecen simples por mucho tiempo. Un modelo que comienza como una ecuaci\u00f3n [&hellip;]<\/p>\n","protected":false,"raw":""},"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=293","iawp_total_views":0,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-592","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>Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados: una gu\u00eda pr\u00e1ctica para flujos de trabajo avanzados de PDE<\/title>\n<meta name=\"description\" content=\"Obtenga informaci\u00f3n sobre c\u00f3mo extender Fipy con m\u00f3dulos personalizados mediante la organizaci\u00f3n de c\u00f3digo PDE reutilizable, manejando t\u00e9rminos de origen, creando modelos acoplados y probando flujos de trabajo avanzados de Fipy.\" \/>\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\/extending-fipy-with-custom-modules\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados: una gu\u00eda pr\u00e1ctica para flujos de trabajo avanzados de PDE\" \/>\n<meta property=\"og:description\" content=\"Obtenga informaci\u00f3n sobre c\u00f3mo extender Fipy con m\u00f3dulos personalizados mediante la organizaci\u00f3n de c\u00f3digo PDE reutilizable, manejando t\u00e9rminos de origen, creando modelos acoplados y probando flujos de trabajo avanzados de Fipy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-22T08:17:32+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=\"15 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/extending-fipy-with-custom-modules\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/extending-fipy-with-custom-modules\\\/\"},\"author\":{\"name\":\"Tomas Delgado\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"headline\":\"Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados\",\"datePublished\":\"2026-07-22T08:17:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/extending-fipy-with-custom-modules\\\/\"},\"wordCount\":2967,\"commentCount\":0,\"articleSection\":[\"Fipy: Documentaci\u00f3n, ejemplos &amp; Desarrollo\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/extending-fipy-with-custom-modules\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/extending-fipy-with-custom-modules\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/es\\\/extending-fipy-with-custom-modules\\\/\",\"name\":\"Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados: una gu\u00eda pr\u00e1ctica para flujos de trabajo avanzados de PDE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-07-22T08:17:32+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"description\":\"Obtenga informaci\u00f3n sobre c\u00f3mo extender Fipy con m\u00f3dulos personalizados mediante la organizaci\u00f3n de c\u00f3digo PDE reutilizable, manejando t\u00e9rminos de origen, creando modelos acoplados y probando flujos de trabajo avanzados de Fipy.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/extending-fipy-with-custom-modules\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/extending-fipy-with-custom-modules\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/extending-fipy-with-custom-modules\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados\"}]},{\"@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":"Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados: una gu\u00eda pr\u00e1ctica para flujos de trabajo avanzados de PDE","description":"Obtenga informaci\u00f3n sobre c\u00f3mo extender Fipy con m\u00f3dulos personalizados mediante la organizaci\u00f3n de c\u00f3digo PDE reutilizable, manejando t\u00e9rminos de origen, creando modelos acoplados y probando flujos de trabajo avanzados de Fipy.","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\/extending-fipy-with-custom-modules\/","og_locale":"es_ES","og_type":"article","og_title":"Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados: una gu\u00eda pr\u00e1ctica para flujos de trabajo avanzados de PDE","og_description":"Obtenga informaci\u00f3n sobre c\u00f3mo extender Fipy con m\u00f3dulos personalizados mediante la organizaci\u00f3n de c\u00f3digo PDE reutilizable, manejando t\u00e9rminos de origen, creando modelos acoplados y probando flujos de trabajo avanzados de Fipy.","og_url":"https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/","og_site_name":"matforge.org","article_published_time":"2026-07-22T08:17:32+00:00","author":"Tomas Delgado","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Tomas Delgado","Tiempo de lectura":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/"},"author":{"name":"Tomas Delgado","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"headline":"Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados","datePublished":"2026-07-22T08:17:32+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/"},"wordCount":2967,"commentCount":0,"articleSection":["Fipy: Documentaci\u00f3n, ejemplos &amp; Desarrollo"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/","url":"https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/","name":"Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados: una gu\u00eda pr\u00e1ctica para flujos de trabajo avanzados de PDE","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-07-22T08:17:32+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"description":"Obtenga informaci\u00f3n sobre c\u00f3mo extender Fipy con m\u00f3dulos personalizados mediante la organizaci\u00f3n de c\u00f3digo PDE reutilizable, manejando t\u00e9rminos de origen, creando modelos acoplados y probando flujos de trabajo avanzados de Fipy.","breadcrumb":{"@id":"https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/es\/extending-fipy-with-custom-modules\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/es\/"},{"@type":"ListItem","position":2,"name":"Ampliaci\u00f3n de Fipy con m\u00f3dulos personalizados"}]},{"@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\/592","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=592"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/592\/revisions"}],"predecessor-version":[{"id":697,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/592\/revisions\/697"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=592"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=592"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}