WaveOpticsPropagation.jl

Propagate waves efficiently, optically, physically, differentiably with Julia Lang.
Author JuliaPhysics
Popularity
14 Stars
Updated Last
3 Months Ago
Started In
March 2023

WaveOpticsPropagation.jl

Build Status Code Coverage Docs stable Docs main
Documentation for stable version Documentation for development version

Propagate waves efficiently, optically, physically, differentiably with Julia Lang. Those functions are fast and memory efficient implemented and hence are suited to be used in inverse problems.

⚠️ Under development. Expect things to break. But feel free to try the examples, they should always work!

Installation

Officially registered, so install with:

julia> using Pkg; Pkg.add("WaveOpticsPropagation")

Examples

Look into the examples folder.

Features

Implemented

  • Propagate (electrical) fields based on wave propagation
  • Propagations
    • Angular Spectrum Method of Plane Waves (AS)
    • Fraunhofer Diffraction
    • Scalable Angular Spectrum propagation
    • Shifted Angular Spectrum propagation
    • Fresnel Propagation with Scaling Behaviour (no priority yet, PR are welcome for that. In principle very similar to the other methods.)
  • CUDA support
  • Differentiable (mainly based on Zygote.jl and ChainRulesCore.jl)

Planned

Vectorial propagation in free space is just a propagation of each of the components. Right now, this is not a priority and is not implemented yet. But of course, each vectorial component can be propagated separately.

Citation

This package was created as part of scientific work. Please consider citing it :)

@article{Wechsler:24,
author = {Felix Wechsler and Carlo Gigli and Jorge Madrid-Wolff and Christophe Moser},
journal = {Opt. Express},
keywords = {3D printing; Computed tomography; Liquid crystal displays; Material properties; Ray tracing; Refractive index},
number = {8},
pages = {14705--14712},
publisher = {Optica Publishing Group},
title = {Wave optical model for tomographic volumetric additive manufacturing},
volume = {32},
month = {Apr},
year = {2024},
url = {https://opg.optica.org/oe/abstract.cfm?URI=oe-32-8-14705},
doi = {10.1364/OE.521322},
}

Development

Contributions are very welcome! File an issue on GitHub if you encounter any problems. Also file an issue if you want to discuss or propose features.

Related packages

There is the outdated PhysicalOptics.jl which provided similar methods. For geometrical ray tracing use OpticSim.jl.