A python electrodynamical CPU/GPU solver written in PyTorch,With full support of PyTorch's automatic differentiation.Based on the Green's Dyadic Method (GDM, volume integral technique in frequency domain).
Project description
TorchGDM
nano-optics full-field solver, written in PyTorch.
TorchGDM is a PyTorch implementation of the Green's dyadic method (GDM), a electro-dynamics full-field volume integral technique. It's main features are mixed simulations combining volume discretized and effective e/m dipole-pair polarizabilities, as well as the general support of torch's automatic differentiation.
TorchGDM is available on the gitlab repository and via PyPi and pip. Please visit also the TorchGDM documentation website.
TorchGDM is originally based on various theoretical works by Christian Girard at CEMES (see e.g. Ch. Girard 2005 Rep. Prog. Phys. 68 1883), with contributions from G. Colas des Francs, A. Arbouet, R. Marty, C. Majorel, A. Patoux, Y. Brûlé and P. R. Wiecha.
If you use TorchGDM for your projects, please cite it.
Getting started
Simulate and plot the scattering cross section spectrum between 550nm and 950nm of a silicon nano-cube (200nm side length), placed in vacuum, illuminated by an x-polarized plane wave:
import torch
import matplotlib.pyplot as plt
import torchgdm as tg
# --- simulation setup
# - vacuum environment
mat_env = tg.materials.MatConstant(eps=1.0)
env = tg.env.freespace_3d.EnvHomogeneous3D(env_material=mat_env)
# - illumination field(s) and wavelength
wavelengths = torch.linspace(550.0, 950.0, 25)
plane_wave = tg.env.freespace_3d.PlaneWave(e0p=1.0, e0s=0.0)
# - discretized structure
structure = tg.struct.StructDiscretizedCubic3D(
discretization_config=tg.struct.volume.cube(l=8),
step=30.0, # in nm
materials=tg.materials.MatDatabase("GaN"),
)
# - define and run simulation.
sim = tg.Simulation(
structures=[structure],
illumination_fields=[plane_wave],
environment=env,
wavelengths=wavelengths,
)
sim.plot_structure() # visualize structure
sim.run() # run the main simulation
# - post-processing: cross sections
cs_results = sim.get_crosssections()
# plot
plt.figure(figsize=(5, 4))
plt.plot(tg.to_np(wavelengths), tg.to_np(cs_results["scs"]))
plt.xlabel("wavelength (nm)")
plt.ylabel("scs (nm^2)")
plt.show()
GPU support
For GPU support, all you need is a GPU enabled version of pytorch. TorchGDM was tested with CUDA. CUDA can be enabled by using:
import torchgdm as tg
tg.use_cuda(True)
Alternatively, GPU usage can be fine controlled by passing the device="cuda"
argument when setting up the simulation class:
sim = tg.Simulation(..., device="cuda")
Features
List of features
General:
- pure python
- run on CPU and GPU, parallelized and vectorized
- full support of torch's automatic differentiation
Simulations:
- 2D and 3D discretized nano-structures
- 2D and 3D effective polarizabilities (electric and magnetic)
- mix of discretized / effective dipole-pair structures
- far-field (plane wave, focused Gaussian) and local illumination (point/line emitters)
Post-processing:
- cross sections (extinction, scattering, absorption)
- near-fields and far-fields
- optical chirality
- Poynting vector
- field gradients
- exact multipole decomposition
- Green's tensors in complex environments
- LDOS / decay rate
- efficient rasterscan simulations
- extract ED/MD dipole pair effective polarizability models
- plotting tools for convenient 2D / 3D visualizations
- ...
Extensible:
- Object oriented extensibility
- materials
- structures
- illuminations
- environments (via adequate Green's tensors)
Installing / Requirements
TorchGDM is pure python, so install via pip is possible on all major operating systems:
pip install torchgdm
TorchGDM was tested under linux and windows with python versions 3.9 to 3.12. It requires following python packages
- pytorch (v2.0+)
- numpy
Further optional dependencies
- pyyaml (support for permittivity data from refractiveindex.info)
- treams (for Mie theory tools)
- scipy (for some tools)
- tqdm (for progress bars)
- psutil (for automatic memory purge)
- matplotlib (2d plotting)
- alphashape (2d contour plotting)
- pyvista (3d visualization, install via: # pip install 'jupyterlab>=3' ipywidgets 'pyvista[all,trame]')
- pymiecs (for some Mie theory unit tests)
(install all optional dependencies via pip: pip install scipy treams pymiecs pyyaml tqdm psutil matplotlib alphashape pyvista
)
Contributing
If you'd like to contribute, please fork the repository and use a feature branch. Pull requests are warmly welcome.
Links
- torchgdm documentation: https://homepages.laas.fr/pwiecha/torchgdm_doc/
- link to PyPi: https://pypi.org/project/torchgdm/
- gitlab repository: https://gitlab.com/wiechapeter/torchgdm
- issue tracker: https://gitlab.com/wiechapeter/torchgdm/-/issues
- in case of sensitive bugs you can also contact me directly at pwiecha|AT|laas|DOT|fr.
- related projects:
Licensing
The code in this project is licensed under the GNU GPLv3.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file torchgdm-0.44.tar.gz
.
File metadata
- Download URL: torchgdm-0.44.tar.gz
- Upload date:
- Size: 180.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | dfae045ab100a71a9ffbcb78ce981ef9eb0bbb35bd4d0181887ce5c1e679605d |
|
MD5 | f88359fdd553094d92c9d8ba5d4cf4ae |
|
BLAKE2b-256 | 42dff0a919cf3ec44af952de24f5ae74f4efd859f010c0fef20294a59dfbd0f2 |