Skip to main content

Nano-optics + autodiff. Full field scattering simulations in pytorch.

Project description

torchgdm logo

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 multi-scale simulations combining volume discretized and effective e/m polarizability models, 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é, S. Ponomareva, A. Azéma and P. R. Wiecha.

If you use TorchGDM for your projects, please cite the accompanying paper (arxiv:2505.09545).

Getting started

Simulate and plot the scattering cross section spectrum between 550nm and 950nm of a GaN nano-cube (240nm 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.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.struct3d.StructDiscretizedCubic3D(
    discretization_config=tg.struct3d.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_spectra_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

TorchGDM was tested on CUDA GPUs and google TPUs. All you need is a GPU enabled version of pytorch. Running on GPU can be enabled by using:

  import torchgdm as tg
  tg.use_cuda(True)

Alternatively, GPU usage can be controlled by setting the device manually:

  sim = tg.Simulation(...)
  sim.set_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 polarizability models (multiple electric and magnetic dipoles)
  • mix of discretized / effective model structures
  • far-field (plane wave, focused Gaussian beam) 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 Green's tensors)

Installing / Requirements

TorchGDM is pure python. Installation via pip is possible on all major operating systems:

pip install -U 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

Following not strictly required packages will be automatically installed:

  • scipy (for several tools)
  • tqdm (progress bars)
  • pyyaml (support for refractiveindex.info permittivity data)
  • matplotlib (2d plotting)
  • alphashape (2d contour plotting)
  • psutil (for automatic memory purge)

Further optional dependencies

  • treams (for T-matrix and Mie theory tools)
  • pyvista (3d visualizations)
  • ipywidgets, jupyterlab and trame (for jupyter inline 3D visualizations)
  • scikit-learn (automatic GPM extraction)
  • pymiecs (for some Mie theory unit tests)

(install all optional dependencies via pip: pip install -U torchgdm[all])

Contributing

If you'd like to contribute, please fork the repository and use a feature branch. Pull requests are warmly welcome.

Links

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

torchgdm-0.55.tar.gz (224.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

torchgdm-0.55-py3-none-any.whl (235.8 kB view details)

Uploaded Python 3

File details

Details for the file torchgdm-0.55.tar.gz.

File metadata

  • Download URL: torchgdm-0.55.tar.gz
  • Upload date:
  • Size: 224.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for torchgdm-0.55.tar.gz
Algorithm Hash digest
SHA256 0e60ba48e582adb3d577a1958933b24d079068b4e46ca5435e2c0f0cccccda49
MD5 2045dca03834539b582da031bf4de27f
BLAKE2b-256 e323a2efa411419bd87c3ed162de98898851cbfafd21691638910fdab68ae76f

See more details on using hashes here.

File details

Details for the file torchgdm-0.55-py3-none-any.whl.

File metadata

  • Download URL: torchgdm-0.55-py3-none-any.whl
  • Upload date:
  • Size: 235.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for torchgdm-0.55-py3-none-any.whl
Algorithm Hash digest
SHA256 aba746db030388ad6bcf3fab4a4c032b74f7883980837fafac9e0cbe858738ed
MD5 b13e58ad433aeb70f0d1e424761f6efe
BLAKE2b-256 1768a544f7f4c852212916bb1bae033050aa280ee950037954826be35bc47e9d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page