[waveugide_cyl] adjust radius calculation

This commit is contained in:
Forgejo Actions 2026-06-25 12:01:36 -07:00
commit c249e78cd9

View file

@ -321,12 +321,20 @@ def linear_wavenumbers(
shape2d = (len(dxes[0][0]), len(dxes[0][1]))
epsilon2d = unvec(epsilon, shape2d)[:2]
grid_radii = rmin + numpy.cumsum(dxes[0][0])
ra = rmin + numpy.cumsum(dxes[0][0])
rb = rmin + dxes[0][0] / 2.0 + numpy.concatenate((
numpy.zeros(1, dtype=dxes[1][0].dtype),
numpy.cumsum(dxes[1][0][:-1]),
))
for ii in range(angular_wavenumbers.size):
efield = unvec(e_xys[ii], shape2d, 2)
energy = numpy.real((efield * efield.conj()) * epsilon2d)
energy_vs_x = energy.sum(axis=(0, 2))
mode_radii[ii] = (grid_radii * energy_vs_x).sum() / energy_vs_x.sum()
er_energy_vs_r = energy[0].sum(axis=1)
ey_energy_vs_r = energy[1].sum(axis=1)
energy_vs_r = er_energy_vs_r + ey_energy_vs_r
mode_radii[ii] = (
(rb * er_energy_vs_r).sum() + (ra * ey_energy_vs_r).sum()
) / energy_vs_r.sum()
logger.info(f'{mode_radii=}')
lin_wavenumbers = angular_wavenumbers / mode_radii
@ -474,7 +482,14 @@ def dxes2T(
Sparse diagonal matrices `(T_a, T_b)`.
"""
ra = rmin + numpy.cumsum(dxes[0][0]) # Radius at Ey points
rb = rmin + dxes[0][0] / 2.0 + numpy.cumsum(dxes[1][0]) # Radius at Ex points
rb = (
rmin
+ dxes[0][0] / 2.0
+ numpy.concatenate((
numpy.zeros(1, dtype=dxes[1][0].dtype),
numpy.cumsum(dxes[1][0][:-1]),
))
) # Radius at Er points
ta = ra / rmin
tb = rb / rmin