cbeam is a propagator for slowly varying and weakly guiding waveguides, written in Python and Julia.
Current version: v0.0.4
Python: numpy,scipy,numexpr,juliacall,wavesolve,pygmsh,meshio,matplotlib
Julia: pythoncall
General: Gmsh
This package uses coupled-mode theory to simulate propagation through waveguides, under the weak guidance, paraxial, and slowly varying envelope approximations. Wavefronts are decomposed in the basis of instantaneous eigenmodes, so that cbeam remains applicable even when a static eigenbasis does not exist (the case for tapered waveguides such the photonic lantern), as well as cases where the eigenbasis becomes degenerate. It's also relatively fast; a 6-port lantern can be characterized in around a minute, and simple cbeam, check out this arXiv paper.
NSF grants 2109231, 2109232, 2308360, 2308361