In this section a few pet projects of mine are highlighted. Most of my projects are in the line of computational optics, which are also the ones that are posted. In the (near)future I hope to put my code online.
Beamlet Tracer
I am developing a beamlet tracer in python by using differential ray tracing. The main rays are traced by using standard ray tracing techniques, where the rays are propagated until a new surface is hit. After the hit the rays are redirected by using Snell's law.
In a beamlet tracer higher order effects are also taken into account, by using Gaussian beams instead of geometrical rays. Gaussian beams are eigenfunctions of Fresnel propagation. This makes it possible to linearise wave propagation. This linear prescription is in the form of ABCD matrices.
A beamlet is trace through a system with a main ray. This ray is at the centre of the Gaussian beam. After each reflection/refraction the new beam properties have to be calculated by using the ABCD matrices. One challenge is the use of non-planar rays, this changes the ABCD matrix to the ABCD tensor. The tensor accounts for any general astigmatic Guassian beam.
Pseudo code
1. Propagate ray to next surface
2. Use Snell's law to refract, or reflect if the surface is mirror like.
3. The local curvature of the surface is used to change the gaussian beam parameters.
One advantage of using beamlets is that they allow to calculate diffraction effects in the non-paraxial limit.
Transformation Optics
Very recently a new field of optics emerged. This field of Transformation Optics(TO) made it possible to create real invisibility cloaks. The foundations of TO is the invariance of Maxwell's equations under a coordinate transform. The change of coordinates can be accounted for as a change in electric permeability. This description has already been used in the field of gravitational lensing, to see what the effects of gravity are on light.
But only recently had this connection been seen between a changed coordinate system and a medium by John Pendry et al.(2006). This field is rapidly developing countless photonic devices which perform order of magnitude better than those based on other type of design, an example of such a design can be found here.
My interest in this field is to see whether or not there are useful new application for astronomical instruments. For that purpose I am writing a ray tracing program that can trace through anisotropic media, based on Crosskey et al.(2012).
GPU assisted adaptive optics simulator in python
My interest in computing has now led me towards parallel programming, and one of the easiest way to learn parallel programming is by using CUDA. CUDA can be directly used from C/C++ by using Nvidia's own compiler. Rapid prototyping in C/C++ is slow, however somebody already thought of this and created a python binding for CUDA, PyCUDA.