Rayica 2.0 was loaded in 22 s and needs 10279 kilobytes of memory on top of 11263 kilobytes already used

Luneberg lens: A case study in Graded Index Refraction

Written in collaboration between Dr Donald Barnhart, Optica Software and Dr David Hayes,  Plasma Antennas Limited, UK.

The Luneberg lens is a sphere with a radially symmetric refractive index profile given by the following formula:


LunebergIndex[rx_, ry_, rz_, n_, c_, R_] = Sqrt[n - c*(rx^2+ry^2+rz^2)/R^2]


(n - (c (rx^2 + ry^2 + rz^2))/R^2)^(1/2)

where n and c are constants and R is the radius of the sphere. Here is a plot as a function of radial position, r, when n = 2, c  = 1.0. and R = 50:


Plot[LunebergIndex[r, 0, 0, 2, 1, 50],{r,-50,50}];


Such a refractive index profile generates an ideal behavior for the Luneberg lens. We can use Rayica's GRINLens function to define a Luneberg lens model. Here is built-in description of GRINLens:


In addition , we will also define a refractive index model for our Luneberg lens using the Rayica's ModelRefractiveIndex function:



All GRINLens refractive models use {RSx, RSy, RSz} within ModelRefractiveIndex to specify the position within the graded-index material: where the default refractive coordinate origin is {RSx, RSy, RSz} = {0,0,0}. Since the GRINLens is created with its center at {R,0,0}, we must first shift the refractive index coordinates by {-R,0,0}. We can now create a lunebergLens subroutine in Mathematica that both defines the refractive index model and creates the GRINLens function.


lunebergLens[R_,n_,c_,options___] :=(
    ModelRefractiveIndex[LuneIndex] = Function[Sqrt[n-c*((RSx-R)^2+RSy^2+RSz^2)/R^2]/.#];

We can now use TurboPlot to model our newly defined lunebergLens.

TurboPlot[{Move[LineOfRays[95,NumberOfRays->11,IntrinsicMedium->1],-60],lunebergLens[50,2.,1,PlotPoints->50],Move[Boundary[200],-60]}, PlotType->TopView, Axes->True,ShowArrows->True];



TurboPlot[{Move[GridOfRays[95, NumberOfRays->11,IntrinsicMedium->1],-60],lunebergLens[50,2.,1,PlotPoints->50],Move[Boundary[200],-60]}];


In this case, the Luneberg lens behaves ideally, by imaging the plane-wave onto a single point at the exit surface of the lens. For other types of sources, however, the lens behavior is far from ideal. Here is such an example that uses a point source instead of a plane wave:


TurboPlot[{Move[WedgeOfRays[45,NumberOfRays->11,IntrinsicMedium->1],-60],lunebergLens[50,2.,1,PlotPoints->50],Move[Boundary[300,125],-60]}, PlotType->TopView, Axes->True,ShowArrows->True];


As an alternative to TurboPlot, you can also use AnalyzeSystem to model the system. Here is the Luneberg lens with n = 2.5 and c = 1.5


AnalyzeSystem[{Move[LineOfRays[95,NumberOfRays->11,IntrinsicMedium->1],-60],lunebergLens[50,2.5,1.5,PlotPoints->50,IntrinsicMedium->1],Move[Boundary[200],-60]}, PlotType->TopView, Axes->True];


However, AnalyzeSystem is not compiled in Mathematica and will result in a much slower calculation.

Created by Mathematica  (August 30, 2006) Valid XHTML 1.1!