Needs["Rayica`Rayica`"]

+++++++++++++++++++++++++

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:

In[17]:=

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

Out[17]=

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

In[18]:=

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

[Graphics:HTMLFiles/index_3.gif]

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[24]:=

?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[19]:=

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[200],-60]}, PlotType->TopView, Axes->True,ShowArrows->True];

[Graphics:HTMLFiles/index_6.gif]

In[18]:=

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

[Graphics:HTMLFiles/index_7.gif]

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[19]:=

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];

[Graphics:HTMLFiles/index_8.gif]

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[27]:=

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];

[Graphics:HTMLFiles/index_9.gif]

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!