Function Repository Resource:

LaguerreGaussianBeam

Source Notebook

Represent a Laguerre–Gaussian beam and its properties

Contributed by: Jaroslav Kysela

ResourceFunction["LaguerreGaussianBeam"]["prop"]

returns the property "prop" of a Laguerre-Gaussian beam.

ResourceFunction["LaguerreGaussianBeam"][{"prop",{w0,zR,l,p}}]

specifies a beam with waist w0, Rayleigh range zR, azimuthal mode number l and radial mode number p.

ResourceFunction["LaguerreGaussianBeam"][{"prop","Normalized"}]

returns property "prop" for a unit beam waist, Rayleigh range, azimuthal mode number and zero radial mode number.

ResourceFunction["LaguerreGaussianBeam"][{"prop",<|k1v1,|>}]

specifies a given set of independent input parameters as key-value pairs.

ResourceFunction["LaguerreGaussianBeam"][{"prop",parspec,z}]

also specifies the longitudinal position.

ResourceFunction["LaguerreGaussianBeam"][propspec,coords]

specifies the coordinate system.

ResourceFunction["LaguerreGaussianBeam"][propspec,coords,False]

returns dependent parameters unevaluated.

Details

Laguerre-Gaussian beams form a class of optical beams that generalize the Gaussian beam, exhibit cylindrical symmetry and have helical wavefronts. These beams have interesting properties such as quantized orbital angular momentum and applications e.g. in transmission of classical and quantum information. These beams constitute an orthonormal basis of the vector space of all possible beam profiles.
ResourceFunction["LaguerreGaussianBeam"] represents a Laguerre-Gaussian field that propagates along the vertical z-axis and that is parametrized by its beam waist w0, Rayleigh range zR, azimuthal mode number l and radial mode number p. The azimuthal mode number is an integer that can take on also negative values, whereas the radial mode number is a non-negative integer. Laguerre-Gaussian modes represent optical vortices, where the topological charge of the vortex is equal to the corresponding azimuthal mode number. The use of letters l and p for the two mode numbers is a standard convention.
Properties can be accessed by calling ResourceFunction["LaguerreGaussianBeam"]["Properties"]. All available profiles and computed parameters are listed in ResourceFunction["LaguerreGaussianBeam"]["Profiles"] and ResourceFunction["LaguerreGaussianBeam"]["Parameters"], respectively. The formatted summary of all properties can be retrieved by ResourceFunction["LaguerreGaussianBeam"]["Summary"].
Available "Profiles" include:
"Amplitude"non-negative amplitude of electromagnetic beam
"SignedAmplitude"real amplitude that is negative iff Laguerre polynomials are negative
"ComplexAmplitude"complex amplitude that includes both "Amplitude" and "Phase"
"Intensity"square of (real) amplitude
"Phase"phase of electromagnetic beam
"SignedPhase"phase that complements "SignedAmplitude"
Available "Parameters" include:
"BeamRadius"beam radius at given longitudinal position
"ComplexBeamParameter"complex beam parameter
"Curvature"beam curvature
"GouyPhase"Gouy phase
"RadiusOfCurvature"radius of curvature
"RayleighRange"Rayleigh range
The formula for a given computed parameter "par" is obtained by calling ResourceFunction["LaguerreGaussianBeam"][par]. For instance, the explicit formula for the Gouy phase is retrieved by calling ResourceFunction["LaguerreGaussianBeam"]["GouyPhase"].
Summary of all properties is returned by ResourceFunction["LaguerreGaussianBeam"]["Summary"] in the form of Dataset.
Not all beam parameters are independent of each other. The canonical set of independent parameters is the beam waist w0, Rayleigh range zR, azimuthal mode number l and polar mode number p, out of which all other properties can be calculated. The relation between w0 and zR reads , where k=2πn/λ is the beam's wavenumber and where further n is the refractive index of the propagation medium and λ is the beam's wavelength. Instead of w0 and zR one could thus choose any complete set of these characteristics to specify the beam. For that reason, there are several ways of specifying a Laguerre-Gaussian beam:
{w0,zR,l,p}specific beam waist, Rayleigh range, and the two mode numbers
"Normalized"equivalent to w0=1,zR=1,l=1, and p=0
<|k1v1,k2v2,|>Association with a set of independent parameters given as key-value pairs
When the parameters are specified as an Association, the following named keys are supported:
"BeamWaist"beam waist
"RayleighRange"Rayleigh range
"Wavenumber"wavenumber k=2πn/λ
"Wavelength"wavelength λ
"RefractiveIndex"refractive index n
"AzimuthalMode"azimuthal mode number l (also referred to as topological charge)
"RadialMode"radial mode number p
There are also short keys supported for convenience:
"w0"beam waist
"zR"Rayleigh range
"k"wavenumber k=2πn/λ
"λ"wavelength λ
"n"refractive index n
"l"azimuthal mode number l
"p"radial mode number p
Full and shortened keys can be used together in a single Association, but a given parameter can be specified only once.
There are two possibilities for an independent set of parameters: 1) exactly two of w0, zR, and k are given together with both and p. 2) exactly one of w0 and zR together with all λ, n, , and p are given.
The input parameters can be specified in the following formats:
vsymbolic variable
0.325numeric value
Quantity[v,unit]symbolic or numeric value with unit
QuantityVariable[v,unit]named physical quantity with unit
Two coordinate systems are supported which can be specified with a second argument:
"Cartesian"Cartesian coordinates {x,y,z} (default)
"Cylindrical"cylindrical coordinates {r,ϕ,z}
The Laguerre-Gaussian beam formula depends explicitly on several computed parameters such as beam radius and radius of curvature. These are by default automatically expanded into their functional representation. One can suppress this expansion by setting the third argument to False. This turns the parameters into QuantityVariable objects and the beam formula is thus returned in its higher-level form. Such a form might be beneficial when rendering the formula in some text or for reference purposes.

Examples

Basic Examples (4) 

Show the Laguerre-Gaussian beam formula:

In[1]:=
ResourceFunction[
  "LaguerreGaussianBeam"][{"Amplitude", {w0, zR, l, p}}][x, y, z]
Out[1]=

Sample beam intensity along x-axis:

In[2]:=
xint = Table[
   ResourceFunction[
     "LaguerreGaussianBeam"][{"Intensity", <|"BeamWaist" -> 0.3, "RayleighRange" -> 1.0, "AzimuthalMode" -> 1, "RadialMode" -> 1|>}][x, 0, 0], {x, -1, 1, 0.01}];
Short[xint]
Out[3]=
In[4]:=
ListPlot[xint]
Out[4]=

Parameter table for given inputs:

In[5]:=
ResourceFunction[
  "LaguerreGaussianBeam"][{"Summary", <|
    "w0" -> Quantity[50, "Micrometers"], "n" -> 1., "\[Lambda]" -> Quantity[808, "Nanometers"], "l" -> -1, "p" -> 2|>,
    Quantity[1, "Meters"]}]["Parameters"]
Out[5]=

Plot the phase profile at beam waist:

In[6]:=
DensityPlot[
 Mod[ResourceFunction[
    "LaguerreGaussianBeam"][{"Phase", {1, 1, 5, 1}}][x, y, 0], 2 \[Pi]], {x, -2, 2}, {y, -2, 2}, Exclusions -> {x < 0}, PlotPoints -> 80]
Out[6]=

Scope (16) 

Profiles (4) 

Available beam profiles:

In[7]:=
ResourceFunction["LaguerreGaussianBeam"]["Profiles"]
Out[7]=

Beam intensity as a function of coordinates:

In[8]:=
ResourceFunction[
 "LaguerreGaussianBeam"][{"Intensity", {w0, zR, l, p}}]
Out[8]=

Plot it along the x-axis:

In[9]:=
Plot[ResourceFunction[
   "LaguerreGaussianBeam"][{"Intensity", {1.2, 3.5, 1, 0}}][x, 0, 0], {x, -5, 5}]
Out[9]=

Two-dimensional cross-section of beam amplitude for given z:

In[10]:=
zpos = 0.5;
beam = ResourceFunction[
   "LaguerreGaussianBeam"][{"Amplitude", {1, 1, 1, 0}, zpos}];
DensityPlot[beam[x, y], {x, -2, 2}, {y, -2, 2}]

When no parameters are supplied, QuantityVariables are used instead:

In[11]:=
ResourceFunction["LaguerreGaussianBeam"]["Intensity"]
Out[11]=
In[12]:=
Short[InputForm[%]]
Out[12]=

Coordinate systems (3) 

By default, a Cartesian coordinate system is used:

In[13]:=
spec = {"ComplexAmplitude", {w0, zR, l, p}};
ResourceFunction["LaguerreGaussianBeam"][spec][x, y, z] == ResourceFunction["LaguerreGaussianBeam"][spec, "Cartesian"][x, y, z]
Out[14]=

Cylindrical coordinates are also supported:

In[15]:=
ResourceFunction["LaguerreGaussianBeam"][spec, "Cylindrical"][r, \[Phi], z]
Out[15]=

The two systems are equivalent:

In[16]:=
ResourceFunction["LaguerreGaussianBeam"][spec, "Cartesian"][x, y, z] ==
     ResourceFunction["LaguerreGaussianBeam"][spec, "Cylindrical"][##,
      z] & @@ ToPolarCoordinates[{x, y}] // Simplify
Out[16]=
In[17]:=
ResourceFunction["LaguerreGaussianBeam"][spec, "Cylindrical"][
     r, \[Phi], z] == ResourceFunction["LaguerreGaussianBeam"][spec, "Cartesian"][##, z] & @@ FromPolarCoordinates[{r, \[Phi]}] // Simplify[# /. ArcTan[r Cos[\[Phi]], r Sin[\[Phi]]] -> \[Phi]] &
Out[17]=

Computed parameters (5) 

Available computed parameters:

In[18]:=
ResourceFunction["LaguerreGaussianBeam"]["Parameters"]
Out[18]=

Summary of all properties:

In[19]:=
ResourceFunction["LaguerreGaussianBeam"]["Summary"]
Out[165]=

Beam radius formula:

In[166]:=
ResourceFunction["LaguerreGaussianBeam"]["BeamRadius"]
Out[166]=

Beam radius as a function of longitudinal position:

In[167]:=
ResourceFunction["LaguerreGaussianBeam"][{"BeamRadius", {w0, zR}}]
Out[167]=

Beam radius for a specific longitudinal position:

In[168]:=
ResourceFunction[
 "LaguerreGaussianBeam"][{"BeamRadius", {w0, zR}, 0.53}]
Out[168]=

Numerical parameter values are supported:

In[169]:=
ResourceFunction[
 "LaguerreGaussianBeam"][{"BeamRadius", {0.5, 1.2}, 0.53}]
Out[169]=

Syntax for most parameters follows that for beam radius:

In[170]:=
{
 ResourceFunction["LaguerreGaussianBeam"]["Curvature"],
 ResourceFunction["LaguerreGaussianBeam"][{"Curvature", zR}],
 ResourceFunction["LaguerreGaussianBeam"][{"Curvature", 0.5}][1.3],
 ResourceFunction["LaguerreGaussianBeam"][{"Curvature", 0.5, 1.3}],
 ResourceFunction[
  "LaguerreGaussianBeam"][{"Curvature", <|"RayleighRange" -> 0.5|>, 1.3}]
 }
Out[170]=

Gouy phase depends explicitly on the mode numbers:

In[171]:=
ResourceFunction["LaguerreGaussianBeam"][{"GouyPhase", {zR, l, p}, z}]
Out[171]=

Input values (4) 

Input parameters can also have units:

In[172]:=
{
 ResourceFunction[
  "LaguerreGaussianBeam"][{"Curvature", QuantityVariable["zR", "Distance"], QuantityVariable["z", "Distance"]}],
 ResourceFunction[
  "LaguerreGaussianBeam"][{"Curvature", Quantity[zR, "Millimeters"], Quantity[z, "Millimeters"]}],
 ResourceFunction[
  "LaguerreGaussianBeam"][{"Curvature", Quantity[1, "Millimeters"], Quantity[5.0, "Millimeters"]}]
 }
Out[172]=

Define dependent parameters by specifying beam waist w0 and Rayleigh range zR:

In[173]:=
{
 ResourceFunction["LaguerreGaussianBeam"][{"BeamRadius", {w0, zR}, z}],
 ResourceFunction["LaguerreGaussianBeam"][{"GouyPhase", {zR, l, p}, z}]
 }
Out[173]=

Input the two values as an Association:

In[174]:=
ResourceFunction[
 "LaguerreGaussianBeam"][{"BeamRadius", <|"BeamWaist" -> w0, "RayleighRange" -> zR|>, z}]
Out[174]=

Short keys are supported:

In[175]:=
ResourceFunction[
 "LaguerreGaussianBeam"][{"BeamRadius", <|"w0" -> w0, "zR" -> zR|>, z}]
Out[175]=

When input as an Association, parameters other than beam waist and Rayleigh range can be supplied:

In[176]:=
ResourceFunction[
 "LaguerreGaussianBeam"][{"BeamRadius", <|"w0" -> w0, "\[Lambda]" -> \[Lambda], "n" -> n|>, z}]
Out[176]=

Compare with:

In[177]:=
ResourceFunction[
  "LaguerreGaussianBeam"][{"BeamRadius", {w0, zR}, z}] /. zR -> ResourceFunction[
   "LaguerreGaussianBeam"][{"RayleighRange", {w0, \[Lambda], n}}]
Out[177]=

Applications (3) 

Create a petal pattern:

In[178]:=
lmode = 5;
zpos = 0.5;
lgPlus = ResourceFunction[
    "LaguerreGaussianBeam"][{"ComplexAmplitude", {1, 1, lmode, 0}}][x,
    y, zpos];
lgMinus = ResourceFunction[
    "LaguerreGaussianBeam"][{"ComplexAmplitude", {1, 1, -lmode, 0}}][
   x, y, zpos];
superposition = Simplify[lgPlus + lgMinus]
Out[179]=

Plot the pattern:

In[180]:=
intensity = ComplexExpand[superposition\[Conjugate] superposition];
DensityPlot[intensity, {x, -5, 5}, {y, -5, 5}, PlotRange -> All, Exclusions -> {x < 0}, PlotPoints -> 50]
In[181]:=

Interactive calculator of Laguerre-Gaussian beam parameters:

In[182]:=
Manipulate[
 UnitConvert@Quiet@ResourceFunction["LaguerreGaussianBeam"][{"Summary",
      Association["w0" -> Quantity[w0val, "Micrometers"], "n" -> nval,
        "\[Lambda]" -> Quantity[\[Lambda]val, "Nanometers"], "l" -> lval, "p" -> pval]
      , Quantity[zval, "Meters"]}]["Parameters"],
 {{w0val, 50, "beam waist"}, 1, 100}, {{nval, 1, "refractive index"}, 0.1, 2},
 {{\[Lambda]val, 500, "wavelength"}, 100, 1000}, {{zval, 0.1, "longitudinal position"}, -5, 5},
 {{lval, 1, "azimuthal mode"}, -5, 5, 1}, {{pval, 0, "radial mode"}, 0, 5, 1}
 ]
Out[182]=

Do not evaluate dependent parameters and use default values of independent parameters for nice rendering:

In[183]:=
ResourceFunction[
 "LaguerreGaussianBeam"]["ComplexAmplitude", "Cylindrical", False]
Out[183]=
In[184]:=
TraditionalForm[%]
Out[184]=

Compare with evaluated formula:

In[185]:=
TraditionalForm@
 ResourceFunction["LaguerreGaussianBeam"]["ComplexAmplitude", "Cylindrical", True]
Out[185]=

Properties and Relations (7) 

For l=0 and p=0, the Laguerre-Gaussian beam coincides with the Gaussian beam:

In[186]:=
gauss = ResourceFunction[
     "GaussianBeam"][{"ComplexAmplitude", {w0, zR}}][x, y, z];
lg0 = ResourceFunction[
   "LaguerreGaussianBeam"][{"ComplexAmplitude", {w0, zR, 0, 0}}][x, y,
   z]
Out[187]=
In[188]:=
lg0 == gauss
Out[188]=

Formulas are normalized such that the total intensity for a given longitudinal position is unity:

In[189]:=
intensity = ResourceFunction[
   "LaguerreGaussianBeam"][{"Intensity", {3.5, 4, -2, 1}}][x, y, z]
Out[189]=
In[190]:=
totalIntensity = Integrate[
  intensity, {x, -\[Infinity], \[Infinity]}, {y, -\[Infinity], \[Infinity]}, Assumptions -> {w0 > 0, zR > 0, z \[Element] Reals}]
Out[190]=

Intensity is the square of real amplitude:

In[191]:=
With[{i = ResourceFunction[
     "LaguerreGaussianBeam"][{"Intensity", {w0, zR, l, p}}][x, y, z], a = ResourceFunction[
     "LaguerreGaussianBeam"][{"Amplitude", {w0, zR, l, p}}][x, y, z]},
 Simplify[i == a^2, {
Element[
Blank[LaguerreL], Reals]}]
 ]
Out[191]=

"Amplitude" is the absolute value of "SignedAmplitude":

In[192]:=
With[{a = ResourceFunction[
     "LaguerreGaussianBeam"][{"Amplitude", {w0, zR, l, p}}][x, y, z], sa = ResourceFunction[
     "LaguerreGaussianBeam"][{"SignedAmplitude", {w0, zR, l, p}}][x, y, z]},
 Simplify[a == Abs[sa], {w0 > 0, zR > 0, 
Element[{x, y, z}, Reals], 
Element[{l, p}, NonNegativeIntegers]}]
 ]
Out[192]=

The difference between "Phase" and "SignedPhase" is given by the sign of Laguerre polynomials:

In[193]:=
With[{p = ResourceFunction[
     "LaguerreGaussianBeam"][{"Phase", {w0, zR, l, p}}][x, y, z], sp = ResourceFunction[
     "LaguerreGaussianBeam"][{"SignedPhase", {w0, zR, l, p}}][x, y, z]},
 Simplify[p - sp]
 ]
Out[193]=

Complex amplitude contains both the amplitude and phase:

In[194]:=
With[{ca = ResourceFunction[
     "LaguerreGaussianBeam"][{"ComplexAmplitude", {w0, zR, l, p}}][x, y, z], a = ResourceFunction[
     "LaguerreGaussianBeam"][{"Amplitude", {w0, zR, l, p}}][x, y, z], ph = ResourceFunction[
     "LaguerreGaussianBeam"][{"Phase", {w0, zR, l, p}}][x, y, z]},
 Simplify@PiecewiseExpand[ca == a Exp[I ph]]
 ]
Out[194]=

Signed profiles give rise to the same complex amplitude:

In[195]:=
With[{ca = ResourceFunction[
     "LaguerreGaussianBeam"][{"ComplexAmplitude", {w0, zR, l, p}}][x, y, z], a = ResourceFunction[
     "LaguerreGaussianBeam"][{"SignedAmplitude", {w0, zR, l, p}}][x, y, z], ph = ResourceFunction[
     "LaguerreGaussianBeam"][{"SignedPhase", {w0, zR, l, p}}][x, y, z]},
 Simplify[ca == a Exp[I ph]]
 ]
Out[195]=

Signed profiles, unlike the non-signed ones, are smooth and thus better suited for computation:

In[196]:=
Plot[ResourceFunction["LaguerreGaussianBeam"][{#, {1, 1, -1, 1}}][0, y, 1], {y, -3, 3}, PlotLabel -> #, PlotRange -> {All, {-1, 1}}] & /@ {"SignedAmplitude", "Amplitude"}
Out[196]=

A singularity in the center for l!=0 is always present:

In[197]:=
Plot[ResourceFunction["LaguerreGaussianBeam"][{#, {1, 1, -1, 1}}][0, y, 1], {y, -3, 3}, PlotLabel -> #, PlotRange -> {All, {-4, 4}}] & /@ {"SignedPhase", "Phase"}
Out[197]=

The topological charge corresponds to the number of phase windings:

In[198]:=
Table[DensityPlot[
  Mod[ResourceFunction[
     "LaguerreGaussianBeam"][{"Phase", {1, 1, tc, 0}}][x, y, 0], 2 \[Pi]], {x, -2, 2}, {y, -2, 2}, Exclusions -> {x < 0}, PlotPoints -> 30, PlotLabel -> TemplateApply["\!\(\*
StyleBox[\"l\",\nFontSlant->\"Italic\"]\) = ``", tc], ImageSize -> Tiny], {tc, -3, 3}]
Out[198]=

The radial mode number corresponds to the number of intensity rings:

In[199]:=
Table[DensityPlot[
  Mod[ResourceFunction[
     "LaguerreGaussianBeam"][{"Intensity", {1, 1, 0, p}}][x, y, 0], 2 \[Pi]], {x, -2, 2}, {y, -2, 2}, PlotPoints -> 30, PlotLabel -> TemplateApply["\!\(\*
StyleBox[\"p\",\nFontSlant->\"Italic\"]\) = ``", p], PlotRange -> All,
   ImageSize -> Tiny], {p, 0, 3}]
In[200]:=

Laguerre-Gaussian beams for small mode numbers:

In[201]:=
tab = Table[
   DensityPlot[
    Mod[ResourceFunction[
       "LaguerreGaussianBeam"][{"Intensity", {1, 1, tc, rm}}][x, y, 0], 2 \[Pi]], {x, -2, 2}, {y, -2, 2}, Exclusions -> {x < 0}, PlotPoints -> 20, ImageSize -> Tiny, FrameTicks -> False, PlotRange -> All], {rm, 0, 2}, {tc, 0, 2}];
Grid[Transpose@Join[{{"", "\!\(\*
StyleBox[\"p\",\nFontSlant->\"Italic\"]\)=0", "\!\(\*
StyleBox[\"p\",\nFontSlant->\"Italic\"]\)=1", "\!\(\*
StyleBox[\"p\",\nFontSlant->\"Italic\"]\)=2"}}, Transpose[Join[{{"\!\(\*
StyleBox[\"l\",\nFontSlant->\"Italic\"]\)=0", "\!\(\*
StyleBox[\"l\",\nFontSlant->\"Italic\"]\)=1", "\!\(\*
StyleBox[\"l\",\nFontSlant->\"Italic\"]\)=2"}}, tab]]]]

Possible Issues (2) 

For Gouy phase and profiles, both mode numbers have to be specified:

In[202]:=
ResourceFunction[
 "LaguerreGaussianBeam"][{"GouyPhase", <|"w0" -> w0, "zR" -> zR, "l" -> l|>, z}]
Out[202]=

Specify both numbers:

In[203]:=
ResourceFunction[
 "LaguerreGaussianBeam"][{"GouyPhase", <|"w0" -> w0, "zR" -> zR, "l" -> l, "p" -> p|>, z}]
Out[203]=

Some sets of input parameters are under- or overdetermined:

In[204]:=
ResourceFunction[
 "LaguerreGaussianBeam"][{"BeamRadius", <|"w0" -> w0, "\[Lambda]" -> \[Lambda]|>, z}]
Out[204]=

Supply all necessary parameters:

In[205]:=
ResourceFunction[
 "LaguerreGaussianBeam"][{"BeamRadius", <|"w0" -> w0, "\[Lambda]" -> \[Lambda], "n" -> n|>, z}]
Out[205]=

Neat Examples (2) 

Plot the high-intensity region around the waist of a z-axis-aligned beam:

In[206]:=
intensity = ResourceFunction[
   "LaguerreGaussianBeam"][{"Intensity", {1, 2, 1, 0}}];
DensityPlot3D[
 intensity[x, y, z], {x, -15, 15}, {y, -15, 15}, {z, -15, 15}, PlotLabel -> "Absolute intensity", PlotPoints -> 70, Axes -> False]

Plot the intensity relative to the maximum intensity:

In[207]:=
DensityPlot3D[
 intensity[x, y, z]/
  intensity[Sqrt[4 + z^2]/(2 Sqrt[2]), 0, z], {x, -15, 15}, {y, -15, 15}, {z, -15, 15}, PlotLabel -> "Relative intensity", Axes -> False,
  OpacityFunction -> "Image3D"]
In[208]:=

Plot wavefronts (might take a couple of minutes to compute):

In[209]:=
{time, wavefronts} = AbsoluteTiming[
   ContourPlot3D[
    ResourceFunction["LaguerreGaussianBeam"][{"Phase", {1, 2, 1, 0}}][
     x, y, z], {x, -5, 5}, {y, -5, 5}, {z, -10, 10}, Sequence[
    RegionFunction -> Function[{x, y, z, f}, z^2 > 4 (x^2 + y^2 - 1)],
      Contours -> Subdivide[-32, 32, 10], ContourStyle -> Directive[
Specularity[20], 
Opacity[0.5, Purple]], Mesh -> None, RegionBoundaryStyle -> None]]];
time
Out[214]=
In[215]:=
volume = ResourceFunction["ExtractGraphicsPrimitives"]@
   RevolutionPlot3D[0.6 Sqrt[4 + z^2], {z, -8, 8}, Sequence[
    RevolutionAxis -> {1, 0, 0}, Mesh -> None, PlotStyle -> Opacity[0.1, Blue], PlotPoints -> 20]];
Show[Graphics3D[{Rotate[
    volume, \[Pi]/2, {0, 1, 0}]}], wavefronts, Sequence[
 ViewPoint -> {1.75, 0.31, 0.9}, ViewVertical -> {0, 1, 0}, ImageSize -> 800, Boxed -> False, PlotRange -> {5 {-1, 1}, 5 {-1, 1}, 10 {-1, 1}}]]
Out[216]=

Publisher

Jaroslav Kysela

Requirements

Wolfram Language 13.0 (December 2021) or above

Version History

  • 1.0.0 – 03 June 2024

Related Resources

Author Notes

One could also add properties LaguerreGaussianBeam["BeamWaist"] and LaguerreGaussianBeam["Wavenumber"] akin to LaguerreGaussianBeam["RayleighRange"].

License Information