Build Status | Code Coverage | Docs stable | Docs main |
---|---|---|---|
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.
Officially registered, so install with:
julia> using Pkg; Pkg.add("WaveOpticsPropagation")
Look into the examples folder.
- 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)
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.
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},
}
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.