CAMFR is a fantastic package, that enables sophisticated modeling of waveguides and waveguide components. The Python interface makes it very easy to create Python modules (functions etc.) to calculate any number of complex problems, such as mode overlaps, waveguide optimizations, structural optimizations, mode profiles, couplers etc. etc. This free package provides some similar capabilities as the commercial FIMMWave - the difference being that, upon my last usage (in 2012), CAMFR's ability to perform full 3-D propagation models was lacking, although 2-D modeling is coded quite nicely. I personally appreciate the way Beinstman setup the simulation package, the way you code up structures is quite nice. I highly recommend using this package and basing your models off of it's capabilities, if appropriate. The main drawback at this point is it's lack of compatibility with Python versions ≥2.5, which ties you to older, buggier versions of Matplotlib, PyLab etc. etc. I often had difficulty with plotting, which I did not have with newer versions of Matplotlib. However, these were not difficult to work around.