OpenCL FDTD electromagnetic simulation in 3 dimensions
jan
d34c478f1d
- Move to jinja2 templates for the opencl code - Combine PML code into the E, H updates for speed - Add Poynting vector calculation code, including precalculation during H update - Use arrays for PML parameters (p0, p1) - Switch to linearized, C-ordered fields (~50% performance boost??) - Added jinja2 and fdfd_tools dependencies |
||
---|---|---|
fdtd | ||
.gitignore | ||
fdtd.py | ||
LICENSE.md | ||
pcgen.py | ||
README.md | ||
requirements.txt |
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 42 iterations/sec. on my Nvidia GTX 580.
- On my laptop (Nvidia 940M) the same simulation achieves ~8 iterations/sec.
- An L3 photonic crystal cavity ringdown simulation (1550nm source, 40nm discretization, 8000 steps) takes about 5 minutes on my laptop.
Capabilities are currently pretty minimal:
- Absorbing boundaries (CPML)
- Conducting boundaries (PMC)
- 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[1] += sin(f0 * t), or save any portion of a field to a file)
Installation
Requirements:
To get the code, just clone this repository:
git clone https://mpxd.net/gogs/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