OpenCL FDTD electromagnetic simulation in 3 dimensions
Go to file
Jan Petykiewicz cf0db63a3f Revert "Add restrict keyword to pointers (not sharing the same memory for multiple fields)"
This reverts commit 60b70bb332.

It appears to have minimal performance impact, and fails to compile on
nvidia cards.
2019-07-17 00:53:55 -07:00
opencl_fdtd Revert "Add restrict keyword to pointers (not sharing the same memory for multiple fields)" 2019-07-17 00:53:55 -07:00
.gitignore expand gitignores 2019-07-15 00:06:43 -07:00
fdtd.py Update example with bloch fields 2018-11-30 01:04:00 -08:00
LICENSE.md Use markdown for license 2016-04-13 03:57:09 -07:00
pcgen.py Fix triangular lattice code in pgcgen 2016-06-21 18:25:23 -07:00
README.md move code to new location 2018-01-15 22:36:40 -08:00
requirements.txt move code to new location 2018-01-15 22:36:40 -08:00
setup.py Use readme as long_description 2018-09-16 20:12:52 -07: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