Needs["Rayica`Rayica`"]

+++++++++++++++++++++++++ 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:

In:=

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

Out= 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:

In:=

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:

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

In:=

?ModelRefractiveIndex 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.

In:=

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

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,-60]}, PlotType->TopView, Axes->True,ShowArrows->True]; In:=

TurboPlot[{Move[GridOfRays[95, NumberOfRays->11,IntrinsicMedium->1],-60],lunebergLens[50,2.,1,PlotPoints->50],Move[Boundary,-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:

In:=

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

In:=

AnalyzeSystem[{Move[LineOfRays[95,NumberOfRays->11,IntrinsicMedium->1],-60],lunebergLens[50,2.5,1.5,PlotPoints->50,IntrinsicMedium->1],Move[Boundary,-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) 