[fdtd.misc.gaussian_beam] avoid some nans at w0 near 0

This commit is contained in:
Jan Petykiewicz 2026-04-17 19:33:40 -07:00
commit 9d419aa3ea

View file

@ -156,11 +156,11 @@ def gaussian_beam(
wz = numpy.sqrt(wz2) # == fwhm(z) / sqrt(2 * ln(2)) wz = numpy.sqrt(wz2) # == fwhm(z) / sqrt(2 * ln(2))
kk = 2 * pi / wl kk = 2 * pi / wl
Rz = zz * (1 + zr2 / z2) inv_Rz = numpy.divide(zz, z2 + zr2, out=numpy.zeros_like(zz), where=(z2 + zr2) != 0)
gouy = numpy.arctan(zz / zr) gouy = numpy.arctan(zz / zr)
gaussian = w0 / wz * numpy.exp(-r2 / wz2) * numpy.exp(1j * (kk * zz + kk * r2 / 2 / Rz - gouy)) gaussian = w0 / wz * numpy.exp(-r2 / wz2) * numpy.exp(1j * (kk * zz + kk * r2 * inv_Rz / 2 - gouy))
row = gaussian[:, :, gaussian.shape[2] // 2] row = gaussian[:, :, gaussian.shape[2] // 2]
norm = numpy.sqrt((row * row.conj()).sum()) norm = numpy.linalg.norm(row)
return gaussian / norm return gaussian / norm