For a Gaussian beam of waist \(w_0\) and wavelength \(\lambda\) , the Rayleigh range is \(z_R = \dfrac{\pi w_0^2}{\lambda}\) and the radius grows as \(w(z) = w_0\sqrt{1 + (z/z_R)^2}\) .
viewof w0 = Inputs. range ([1 , 500 ], {value : 50 , step : 1 , label : "Waist w₀ (µm)" })
viewof lambda_um = Inputs. range ([0.4 , 1.6 ], {value : 1.064 , step : 0.001 , label : "Wavelength λ (µm)" })
zR = Math . PI * (w0 * 1e-6 ) ** 2 / (lambda_um * 1e-6 )
theta_mrad = (lambda_um * 1e-6 ) / (Math . PI * (w0 * 1e-6 )) * 1e3
html `<p style="font-size:1.15rem;margin:.4rem 0 1rem">Rayleigh range <b>z<sub>R</sub> = ${ (zR * 1e3 ). toLocaleString ("en" , {maximumFractionDigits : 2 })} mm</b> · half-divergence <b>θ = ${ theta_mrad. toFixed (2 )} mrad</b></p>`
Plot. plot ({
width : 660 , height : 280 ,
marginLeft : 55 ,
x : { label : "z (mm)" },
y : { label : "beam radius w (µm)" , grid : true },
marks : [
Plot. line (
d3. range (- 4 , 4.02 , 0.05 ). map (k => k * zR). map (z => ({ z : z * 1e3 , w : w0 * Math . sqrt (1 + (z / zR) ** 2 ) })),
{ x : "z" , y : "w" , stroke : "#0E4D64" , strokeWidth : 2 }
),
Plot. line (
d3. range (- 4 , 4.02 , 0.05 ). map (k => k * zR). map (z => ({ z : z * 1e3 , w : - w0 * Math . sqrt (1 + (z / zR) ** 2 ) })),
{ x : "z" , y : "w" , stroke : "#0E4D64" , strokeWidth : 2 , opacity : 0.4 }
),
Plot. ruleX ([- zR * 1e3 , zR * 1e3 ], { stroke : "#6C4AB6" , strokeDasharray : "4 3" })
]
})