Downloads
DIN A1 poster [PDF]VWPM for WIN64 [.exe]
3D WPM for CPU [.bin]
2D WPM for GPU [.bin]
3D WPM for GPU [.bin]
Simulations for propagation of electromagnetic fields are time consuming for complex or large systems. The Vector Wave Propagation Method is a Fourier method, based on the Raleigh-Sommerfeld diffraction integral and the scalar Wave Propagation Method (WPM) introduced by Brenner et. al. in 1993. The VWPM was introduced by Fertig et. al. 2011. It simulates the propagation of three-dimensional vector waves through inhomogeneous media over the full range of spatial frequencies, i.e. without paraxial limitations as they exist for example in the Beam Propagation Method (BPM).
Compared to the Finite Difference Time Domain (FDTD) method, memory space and calculation time consumed by the VWPM are low while the results are comparable for systems with a preferred (optical) axis of propagation. This makes the VWPM a useful method for simulating complex lens systems or comparable system.
A multi-threaded version of the VWPM algorithm exists since 2011. It scales with second order in the number of samples for the three-dimensional case. The two-dimensional scalar algorithm has been ported to a massively parallel GPU system in 2017 and subsequently the three-dimensional and vector versions as well. Executables and system configuration files are available for download in the tables below. Further runtime improvements are subject of investigations.
The list of Fourier simulators shown here covers Beam and Wave Propagation Methods for scalar and vector waves to run on CPU and GPU hardware. It has to be mentioned that a vectorial version of the Beam Propagation Method if of limited benefit due to its limitation to paraxial propagation. All methods provided here are unidirectional algorithms. The bidirectional versions are available as well but not for free download. All binaries have been compiled for Linux (Ubuntu).
Method | Type | 2D/3D | CPU | GPU | File |
---|---|---|---|---|---|
SBPM1 | scalar, unidirectional3 | 2D | ✓ |
✓ |
[.tgz*] |
SBPM | scalar, unidirectional | 3D | ✓ |
✓ |
[.tgz*] |
SWPM2 | scalar, unidirectional | 2D | ✓ |
✓ |
[.tgz] |
SWPM | scalar, unidirectional | 3D | ✓ |
✓ |
[.tgz] |
VWPM | vectorial, unidirectional | 2D | ✓ |
✓ |
[.tgz] |
VWPM | vectorial, unidirectional | 3D | ✓ |
✓ |
[.tgz] |
System | File |
---|---|
Homogeneous Medium | [.cfg] |
Interface | [.cfg] |
Waveguide | [.cfg] |
Lens | [.cfg] |
Taper | [.cfg] |
Splitter | [.TBD] |
Grating | [.cfg] |
Asphere | [.TBD] |
User-defined | [.TBD] |
export LD_LIBRARY_PATH = your_tar_extract_dir:$LD_LIBRARY_PATH
./pm -p -i wguide.cfg
To start a simulation on your GPU, invoke the simulator as follows./pm -g -i wguide.cfg
To run a simulation on CPU and GPU, invoke the simulator as follows./pm -g -p -i wguide.cfg
To compare execution times of CPU and GPU runs, invoke the simulator as follows./pm -g -p -c -i wguide.cfg
To store the runtime results for a series of runs into a file, invoke the simulator as follows./pm -g -p -c -i wguide.cfg -r qor.csv
To suppress messages when invoking the simulator for a series of runs from a script./pm -q -g -p -c -i wguide.cfg -r qor.csv
To print the available options of the simulator, invoke the help function of the simulator as follows./pm -h
[global]
nx = 48
ny = 48
nz = 96
x = 4000
y = 4000
z = 8000
method = vwpm
scale = nm
[/global]
Gaussian beam | Plane wave | User-defined |
[wave] |
[wave] |
[wave] layer-sections are under work and will be available soon. |
Homogeneous medium | Lens | Waveguide | Taper | 2D Grating |
[layer] |
[layer] |
[layer] |
[layer] |
[layer] |