WaveOpticsPropagation.jl

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.

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
    • [x] Angular Spectrum Method of Plane Waves (AS)
    • [x] Fraunhofer Diffraction
    • [x] Scalable Angular Spectrum propagation
    • [x] 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.)
  • [x] CUDA support
  • [x] 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 :)

@misc{wechsler2024wave,
      title={Wave optical model for tomographic volumetric additive manufacturing}, 
      author={Felix Wechsler and Carlo Gigli and Jorge Madrid-Wolff and Christophe Moser},
      year={2024},
      eprint={2402.06283},
      archivePrefix={arXiv},
      primaryClass={physics.optics}
}

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.

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