Inicio Ejemplos Capturas de pantalla Manual de usuario Logotipo de Bluesky YouTube
OghmaNano Simule células solares orgánicas/de perovskita, OFETs y OLEDs DESCARGAR

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.

New simulation window showing the FDTD examples category.
Abra FDTD examples desde la ventana New simulation.
FDTD example list showing the Free space simulation.
Seleccione el ejemplo Free space.

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.

Main OghmaNano window showing the Free space simulation. Checking the show world option.
Ventana principal de OghmaNano mostrando la simulación Free space. Activando la opción show world.
Main OghmaNano window showing the Free space simulation. Showing the world box that shows the extent of the simulation domain.
Ventana principal de OghmaNano mostrando la simulación Free space. Mostrando la world box que indica la extensión del dominio de simulación
World size editor showing the dimensions of the FDTD simulation domain.
El editor de tamaño del mundo, accesible mediante el botón Substrate xz-size.

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.

Optical ribbon in OghmaNano showing the Optical mesh button.
La cinta Optical. Haz clic en Optical mesh para inspeccionar la discretización espacial.

Haz clic en Optical mesh para abrir el editor de malla.

Optical mesh editor showing mesh points and wavelength range between 531 nm and 532 nm.
Configuración de la malla óptica, incluida la resolución espacial y el rango de longitudes de onda (531–532 nm).

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.

Terminal output showing the FDTD module initialising and searching for OpenCL devices.
Salida de terminal durante la ejecución. El módulo FDTD se inicializa, informa del espaciado de la malla y de la longitud de onda, y busca dispositivos OpenCL disponibles antes de iniciar el bucle de pasos temporales.
Output tab showing simulation result files including detector data and snapshots directory.
La pestaña Output tras la finalización. Los archivos generados incluyen trazas de detectores, exportaciones de configuración y el directorio 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í.

Later-time snapshot showing spherical wavefront propagation.
Un snapshot en un tiempo posterior que muestra la propagación hacia afuera del frente de onda de la luz verde.
Snapshot viewer showing green light propagating in free space.
Visor de snapshots: seleccione power density y use los deslizadores para explorar tiempo y espacio.

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.

Main window showing the detector plane in purple.
El plano detector (cuadrícula púrpura) dentro del dominio de espacio libre.
Detector power versus time plot.
Potencia del detector en función del tiempo.

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.

Optical mesh editor configured for a 2D XZ simulation by suppressing the Y dimension.
Malla óptica configurada para 2D: suprima el eje Y para ejecutar una simulación en XZ.
Snapshot viewer in 2D showing the wave propagating in the XZ plane.
El visor de snapshots en 2D: la evolución del campo en el plano XZ se renderiza rápidamente y es fácil de explorar.
FDTD editor showing output verbosity to disk set to write everything to disk.
Para una reproducción más fluida, aumente la densidad de snapshots configurando la salida en Write everything to disk.

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.