Skip to content
philmain28Public

About

Simple python library for calculating the modes of electromagnetic waveguides using finite difference frequency domain method.

Topics

Resources

Stars

45 stars

Watchers

5 watching

Forks

Latest commit

 

History

106 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

philsol

Modes for the Masses (Massless?)

Fed up with relying on expensive proprietary software for your electromagnetic waveguide research? philsol might just be the package for you. In a world where high performance hardware is cheaper than specialist software, philsol throws elegance and sophistication out of the window and replaces them with brute force.

This is a fully vectorial finite-difference waveguide mode solver and a direct Python implementation of the algorithm found in the paper: 'Full-vectorial finite-difference analysis of microstructured optical fibres', by Zhu and Brown.

Warning: I haven't thoroughly tested so be wary and check the results are sensible...

New Warning: The original paper by Zhu and Brown is in Gaussian rather than SI units. To correct this, use the conversion table here.

Installation

  • Install using pip with the command pip install philsol
  • If you can't be bothered, the important part is the function eigen_build in core.py.

Examples

  • Commented example projects can be found in the examples directory.
  • To run the examples, first install philsol in your Python environment (see above).

Features

Solver

  • Solves vector Maxwell (Helmholtz) equations in 2-D for arbitrary refractive-index profiles.
  • Returns the x and y components of the electric field.
  • philsol can handle anisotropic refractive indices with diagonal tensor.
  • Choice of solving routines: the default scipy.sparse solver or SLEPc (slepc4py and petsc4py). These libraries can be fiddly to set up but are very heavily featured, including some limited GPU support.
  • Additional field components Ez, Hx, Hy, Hz can be calculated from the construct module.
  • Perfect electric conductor, periodic and absorbing boundary conditions.

Geometry building

  • The quickest way of importing geometry is with a bitmap image.
  • See examples/example_image.py and examples/Hollow_Core_Fibre.ipynb for examples loading .bmp images.
  • See examples/example_build.py for an example in building geometry using PIL/Pillow.
  • See examples/Boundary Interpolation Example.ipynb for an attempt to handle curved boundaries with Pillow's anti-aliasing capabilities.

Final Note

I wrote this code a while ago during my PhD but sometimes I get nostalgic about photonics, so if you are doing anything cool with philsol I would love to know about it.

About

Simple python library for calculating the modes of electromagnetic waveguides using finite difference frequency domain method.

Topics

Resources

Stars

45 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages