Parte D: Estabilidad del solver/mallado
Esta sección se centra en la estabilidad del solver y la elección de la malla. Las simulaciones unidimensionales (1D) son generalmente muy estables y se ejecutan rápidamente. A medida que aumenta la dimensionalidad—de 1D a 2D y 3D crece el número de ecuaciones y el número de términos de acoplamiento entre ellas, lo que hace más probable la inestabilidad numérica. Si la configuración no se elige cuidadosamente para una simulación 2D o 3D, una simulación puede no converger.
Aquí forzaremos deliberadamente algunas configuraciones simples para provocar no convergencia, luego diagnosticaremos por qué ocurre y cómo corregirlo. Al reproducir usted mismo estos modos de fallo comunes, aprenderá a reconocer los síntomas y aplicar las soluciones adecuadas (p. ej., ajustar la malla, reducir el tamaño del paso de sesgo o moderar parámetros extremos del material) para recuperar una solución estable.
1. Valores irrealmente bajos
En muchos casos, los problemas de convergencia surgen de valores de entrada no físicos. Para ilustrarlo, establecemos deliberadamente la movilidad de portadores en 0 y examinamos los errores resultantes. Por supuesto, la movilidad nunca es realmente cero en un material real—siempre tiene un valor finito—pero este ejemplo muestra lo que ocurre cuando al solver se le da un parámetro irrealista.
Abra el editor de Electrical Parameters (ventana principal → pestaña Device) y establezca la movilidad en 0, como se muestra en ??. Ahora ejecute la simulación. Debería ver una pantalla de error similar a ??, con dos recuadros rojos: un recuadro vertical alrededor del resumen de residuales y un recuadro horizontal cerca del mensaje de fallo.
Si observa el recuadro rojo vertical puede ver f()=2.54e2 seguido de otras líneas donde f() es muy grande (p. ej.
1e15, 1e5, 1e8, 1e7). Aquí, f() es el
error residual del solver: una medida de cuán bien se satisfacen actualmente las ecuaciones acopladas. Idealmente, el residual del solver sería exactamente cero, aunque en la práctica esto nunca puede alcanzarse. Un residual en el rango de 1e−10 a 1e−8 indica una convergencia muy buena, mientras que valores alrededor de 1e−1 siguen siendo aceptables.
En cambio, residuales en las centenas (p. ej. 2.54e2) - especialmente cuando van acompañados de valores de componentes tan grandes como 1e15-son una señal clara de que el solver está teniendo dificultades y el sistema se ha vuelto inestable.
El recuadro rojo horizontal normalmente informa de por qué la ejecución finalmente se aborta: Holes asking for Esto significa que el nivel de cuasi-Fermi calculado ha ido fuera del rango tabulado. Antes de comenzar, el modelo pretabula relaciones como nivel de cuasi-Fermi frente a densidad de portadores sobre un amplio dominio de energías - de hecho mucho mayor de lo que típicamente cabría esperar en un dispositivo. Cuando el solver se vuelve inestable, el modelo puede solicitar valores irreales muy por encima de ese rango; en ese punto el solver no puede evaluar las cantidades necesarias y se detiene. 3e5 but only defined in range [min, max].
En resumen, al establecer la movilidad en un valor no físico (μ = 0) forzamos las ecuaciones a un régimen que no tiene sentido físico, por lo que el método numérico falla: grandes residuales, seguidos de una solicitud de valores fuera de las tablas precalculadas, y luego un fallo. Es importante señalar que este resultado no es una debilidad del modelo ni un error del software.
Al introducir parámetros no físicos, el solver es empujado a un régimen donde no existe una solución matemática o físicamente válida y, por tanto, no puede proporcionar un resultado significativo.
2. Valores irrealmente altos
En este ejemplo establecemos la movilidad de portadores en μ = 1×106 m²·V⁻¹·s⁻¹. Este es un
valor intencionadamente no físico para un modelo drift–diffusion de semiconductor: una magnitud así podría estar
asociada a regímenes de conducción metálica más que al transporte por hopping/ banda en semiconductores orgánicos o típicos. En la práctica, no usaría un valor tan grande para simulaciones OFET.
Si ejecuta la simulación con esta configuración, puede observar que el solver tiene dificultades para converger. En la lectura de residuales
(el recuadro que informa de f()) verá errores extremadamente grandes—p. ej.
1e24, 1e19, 1e21—que no decaen. Es normal que los residuales estén
elevados durante las primeras iteraciones mientras el solver encuentra un estado consistente, pero deberían asentarse rápidamente
hacia valores pequeños. Residuales persistentemente enormes son una indicación clara de que el sistema se ha vuelto numéricamente
rígido o no físico debido a los parámetros elegidos.
La conclusión: evite movilidades irrealmente altas. Coeficientes de transporte excesivos hacen que el sistema de EDP sea muy rígido, causando mal condicionamiento y no convergencia. Use valores de μ físicamente razonables para su sistema de materiales y vuelva a ejecutar con pasos de sesgo moderados para restaurar un comportamiento estable.
3. Estructuras de dispositivo malas
En este ejemplo abrimos el editor de contactos y establecemos el ancho de contacto del Source a un valor muy pequeño (véase ??) , de una micra. A primera vista esto puede no parecer problemático, pero crea un problema sutil: la simulación se basa en una malla de diferencias finitas, donde cantidades como el campo eléctrico y la densidad de portadores se calculan solo en los puntos de malla definidos.
Si inspecciona el Electrical Mesh Editor (situado bajo la pestaña Electrical), notará que este contacto ultrafino de una micra cae entre puntos de malla (véase ??). Como resultado, el contacto es efectivamente “omitido” por la rejilla de diferencias finitas y nunca se aplica correctamente a la estructura del dispositivo. Esto crea una discrepancia entre la geometría definida y la malla numérica, impidiendo que la simulación converja.
Para corregirlo, puede o bien aumentar el espesor del contacto para que solape al menos un punto de malla, o aumentar la densidad de malla (es decir, añadir más puntos) en la rejilla de diferencias finitas para que el contacto quede correctamente capturado.
4. Demasiados puntos de malla
Una preconcepción común al comenzar con modelos de diferencias finitas es que más puntos de malla producen automáticamente resultados más precisos. El razonamiento a menudo es: “cinco puntos de malla deben ser malos, pero mil deben ser excelentes”. En la práctica, este no es el caso.
OghmaNano utiliza un método de discretización llamado el esquema de Scharfetter–Gummel, que interpola con precisión cantidades como la densidad de portadores y el potencial entre puntos de malla. El solver no simplemente asume un comportamiento lineal entre nodos; en su lugar, utiliza un enfoque de ajuste exponencial que captura la física del transporte con gran precisión incluso en mallas relativamente gruesas. Esto significa que puede lograr buena precisión con sorprendentemente pocos puntos.
Aumentar la densidad de malla no solo incrementa el tiempo de ejecución—de hecho puede reducir la estabilidad y la precisión. Una malla más fina genera un sistema de ecuaciones más grande, haciendo el problema numérico más difícil de resolver. Como resultado, la matriz se vuelve más rígida, los residuales pueden aumentar y el solver puede tener dificultades para converger.
Siempre existe un compromiso entre capturar la física, mantener razonable el tiempo de simulación y evitar
error numérico innecesario. Las figuras de abajo ilustran esto: con 100 puntos de malla a través del
dispositivo, el solver informa inicialmente residuales muy grandes (p. ej. 1e6, 1e5). Solo después
de muchas iteraciones se estabiliza en valores razonables de f(). Esta inestabilidad surge porque la
malla es excesivamente fina, lo que hace que el sistema sea difícil de manejar para el solver.