opencl_fdtd/opencl_fdtd
2024-01-10 20:57:23 -08:00
..
kernels add comment about pml coords 2021-10-31 19:48:24 -07:00
__init__.py typo fix 2024-01-10 20:57:23 -08:00
LICENSE.md move to hatch-based build 2022-11-22 14:31:43 -08:00
README.md move to hatch-based build 2022-11-22 14:31:43 -08:00
simulation.py type modernization 2024-01-10 20:54:12 -08:00
test_simulation.py style and type fixes 2022-11-24 16:12:40 -08:00

opencl_fdtd

opencl_fdtd is a python application for running 3D time-domain electromagnetic simulations on parallel compute hardware (mainly GPUs).

Performance highly depends on what hardware you have available:

  • A 395x345x73 cell simulation (~10 million points, 8-cell absorbing boundaries) runs at around 91 iterations/sec. on my AMD RX480.
  • On an Nvidia GTX 580, it runs at 66 iterations/sec
  • On my laptop (Nvidia 940M) the same simulation achieves ~12 iterations/sec.
  • An L3 photonic crystal cavity ringdown simulation (1550nm source, 40nm discretization, 8000 steps) takes about 3 minutes on my laptop.

Capabilities are currently pretty minimal:

  • Absorbing boundaries (CPML)
  • Perfect electrical conductors (PECs; to use set epsilon to inf)
  • Anisotropic media (eps_xx, eps_yy, eps_zz, mu_xx, ...)
  • Direct access to fields (eg., you can trivially add a soft or hard current source with just sim.E[ind] += sin(f0 * t), or save any portion of a field to a file)

Installation

Requirements:

  • python 3 (written and tested with 3.5)
  • numpy
  • pyopencl
  • jinja2
  • fdfd_tools

Optional (used for examples):

To get the code, just clone this repository:

git clone https://mpxd.net/code/jan/opencl_fdtd.git

You can install the requirements and their dependencies easily with

pip install -r requirements.txt

Running

The root directory contains fdtd.py, which sets up and runs a sample simulation (cavity ringdown).

python3 fdtd.py