Tutorial FDTD: propagación de luz verde en espacio libre
1. Descripción general: qué vas a simular
Este tutorial introduce el motor Finite-Difference Time-Domain (FDTD) en OghmaNano utilizando el sistema físico más simple posible: la propagación de ondas electromagnéticas en espacio libre. Una fuente monocromática de luz verde, con una longitud de onda de 530 nm, se lanza en un dominio computacional vacío. No hay guías de onda, ni resonadores, ni materiales distintos del vacío. El propósito no es demostrar un dispositivo, sino hacer visible la maquinaria numérica.
El módulo FDTD resuelve directamente las ecuaciones de rotacional de Maxwell en el dominio temporal sobre una malla espacial discreta. En cada paso temporal, los campos eléctricos y magnéticos se actualizan en toda la malla. Como el algoritmo es altamente paralelo, OghmaNano lo ejecuta utilizando OpenCL y utilizará automáticamente tu GPU si está disponible. Este tutorial sirve por tanto como una demostración de física y como una primera introducción al backend FDTD acelerado por GPU.
Al final de esta página habrás creado una simulación, inspeccionado el tamaño del mundo y la malla espacial, ejecutado el solver y visualizado cómo la luz verde se propaga por el espacio en tres dimensiones.
2. Creación de la simulación Free space
Abre la ventana New simulation y selecciona la categoría FDTD examples, luego elige el ejemplo llamado Free space. Las dos ventanas de selección se muestran a continuación.
Después de cargarlo, la ventana principal de OghmaNano aparece con una escena tridimensional simple. El mundo computacional está inicialmente vacío salvo por una fuente y una región detectora. Haz clic con el botón derecho dentro de la vista 3D y activa Show world box. Aparecerá una caja delimitadora roja que define los límites del dominio FDTD.
Las dimensiones del mundo pueden inspeccionarse haciendo clic en el botón Substrate xz-size en la barra de herramientas izquierda. Esto abre el editor de tamaño del mundo, donde se define el tamaño físico del dominio de simulación en micrómetros. Para este tutorial no es necesario cambiar nada; el dominio ya ha sido configurado para contener cómodamente varias longitudes de onda de luz verde.
3. Inspección de la configuración óptica y la malla
A continuación, abre la cinta Optical en la parte superior de la ventana.
Haz clic en Optical mesh para abrir el editor de malla.
El editor de malla muestra cuántos puntos de la malla se utilizan en cada dirección espacial. Estos determinan la resolución espacial del cálculo FDTD. El rango de longitud de onda está establecido entre 531 nm y 532 nm, lo que corresponde a luz verde. En este ejemplo, los parámetros de espesor mostrados en el editor de malla se escalan automáticamente al tamaño del mundo y pueden ignorarse. El punto importante es que la malla espacial es suficientemente fina para resolver la longitud de onda electromagnética.
4. Ejecución del solver FDTD acelerado por GPU
Inicia la simulación haciendo clic en el botón Run simulation o presionando F9. La pestaña Terminal mostrará la información del solver.
snapshots/ que contiene datos de campo resueltos en el tiempo.
En la salida del Terminal, observa el texto verde que indica Searching for OpenCL devices. En esta etapa el programa está explorando tu sistema en busca de GPUs compatibles. En sistemas con una tarjeta gráfica compatible, el solver seleccionará la GPU y ejecutará allí el bucle temporal. En el ejemplo mostrado, el cálculo se ejecuta en un backend de CPU que emula un dispositivo OpenCL, pero en una estación de trabajo moderna la misma simulación utilizará automáticamente el procesador gráfico para la aceleración.
5. Inspección de la salida y de los snapshots de campo
Tras finalizar, cambia a la pestaña Output. Los archivos generados se muestran allí.
Haz doble clic en el directorio snapshots para abrir el visor de snapshots. Selecciona power density en la lista desplegable en la parte inferior de la ventana. El campo coloreado representa la densidad instantánea de energía electromagnética. Utiliza el deslizador horizontal para avanzar y retroceder en el tiempo, y los deslizadores espaciales para examinar diferentes secciones del dominio. En algunos ordenadores, especialmente al ejecutar mallas grandes, el visor puede tardar un momento en responder mientras carga cada conjunto de datos.
A medida que avances en el tiempo, observarás cómo el frente de onda se expande por el dominio. En espacio libre, sin límites ni estructuras, la propagación es uniforme y simétrica, limitada únicamente por las condiciones de frontera absorbentes en los bordes de la caja computacional.
6. Visualización de la potencia del detector
La cuadrícula púrpura visible en la ventana principal representa un plano detector situado dentro del dominio de simulación. Haz doble clic en detector 0 en la pestaña Output para abrir su traza de potencia registrada.
La gráfica resultante muestra la potencia electromagnética que atraviesa ese plano en función del tiempo. Inicialmente el detector registra señal cero. Cuando el frente de onda alcanza el plano, la potencia medida aumenta y luego se estabiliza según el perfil temporal de la fuente. Esta configuración sencilla facilita conectar la propagación visual de la onda en el visor de snapshots con una medición cuantitativa de potencia.
Ahora has completado tu primera simulación FDTD en OghmaNano. Aunque el sistema no contenía materiales ni dispositivos, demostró todo el flujo numérico: definición del mundo, construcción de la malla, selección del dispositivo GPU, integración temporal, visualización de campos y extracción de detectores. En tutoriales posteriores, estas mismas herramientas se aplicarán a sistemas fotónicos y optoelectrónicos estructurados.
7. Acelerar la simulación cambiando a 2D (XZ)
A menudo, las simulaciones completamente tridimensionales no son necesarias para comprender estructuras y dispositivos, especialmente cuando la física es esencialmente invariante en una dirección. En esos casos puedes obtener una aceleración considerable reduciendo el problema a dos dimensiones. Para el ejemplo Free space, cambiar de un mundo 3D a una simulación XZ elimina toda la dimensión Y de la malla computacional. El resultado son menos puntos de malla, menos datos de campo y tiempos de ejecución dramáticamente más cortos—normalmente lo suficientemente rápidos como para que las repeticiones sean prácticamente interactivas.
Para hacerlo, vuelve a la cinta Optical, abre Optical mesh y selecciona la configuración de malla 2D mostrada en ??. El cambio clave es que el eje Y se suprime para que la simulación se convierta en un cálculo en el plano XZ.
Con la malla reducida ahora a dos dimensiones, ejecuta la simulación nuevamente. Deberías notar inmediatamente
que el solver se completa casi instantáneamente en comparación con el caso 3D. Abre otra vez el directorio
snapshots/ y recorre el tiempo en el visor de snapshots
(??).
Como el conjunto de datos es mucho más pequeño, el visor no solo carga más rápido, sino que también responde más
rápidamente cuando arrastras el deslizador temporal o mueves los controles de sección espacial.
Un detalle a tener en cuenta es que la suavidad percibida de la animación puede cambiar. En la ejecución 2D, la simulación avanza muy rápidamente y normalmente se están guardando menos fotogramas, por lo que al desplazarte en el tiempo la evolución puede parecer ligeramente entrecortada—simplemente porque hay menos snapshots registrados entre un índice temporal y el siguiente. Si deseas seguir la propagación de la onda con mayor detalle temporal, aumenta la cantidad de salida escrita en disco.
Para hacerlo, ve nuevamente a la pestaña Optical, haz clic en el botón FDTD simulation para abrir la ventana de configuración FDTD y cambia Output verbosity to disk de Write everything to disk every 8th step a Write everything to disk (??). Esto escribe un snapshot en cada paso temporal. Cuando vuelvas a abrir el visor de snapshots, podrás seguir la propagación de la onda con mucha mayor precisión en el tiempo, con una resolución temporal mucho más fina durante la reproducción y la exploración.