[fdtd.misc.gaussian_beam] avoid some nans at w0 near 0
This commit is contained in:
parent
4913211883
commit
9d419aa3ea
1 changed files with 3 additions and 3 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue