Radial Waveguide

Radial waveguides are structures that support radial wave propagation between parallel conducting plates. Unlike conventional waveguides where propagation is along the z-axis, radial guides exhibit wave propagation in the radial direction (ρ-direction). The field solutions involve Hankel functions of the radial coordinate, combined with sinusoidal variations in the azimuthal (φ) and vertical (z) directions.

Common examples include parallel-plate disk structures and sector-shaped geometries.

TE Modes

The following visualization shows the Hρ field for the first 12 TE modes, rendered on a 3D cylindrical sector:

H = 1
R = 1

name = "../Assets/mesh/radial_wg1.msh"
#radialwg_mesh(H, R; dl = 0.4e-1, name = name)

coord, conn, _ = mesh_data_radial(name)
coords = coord[:, 1:maximum(conn)]
xcoords = coords[1, :]
ycoords = coords[2, :]
zcoords = coords[3, :]
rcoords = map((x, y) -> hypot(x, y), xcoords, ycoords)
ϕcoords = map((x, y) -> atan(y, x), xcoords, ycoords)

modekind = [(0, 1), (1, 1), (2, 1), (3, 1), (0, 2), (1, 2),
            (2, 2), (3, 2), (0, 3), (1, 3), (2, 3), (3, 3)]

plot_ids = Iterators.product(1:4, 1:3) |> collect |> vec

fig = Figure(size = (1200, 900))
for (idplot, (m, n)) in enumerate(modekind)
    stitle = L"TE_{%$m%$n}"
    ii, jj = plot_ids[idplot]
    axi = Axis3(fig[jj,ii], title = stitle, titlesize = 20)
    hidedecorations!(axi)
    fields = te_radial_fields(rcoords, ϕcoords, zcoords, H, m, n, 0.0, 1.0, 100e9, 1, 1)
    fz = getindex.(fields, 4)
    mesh!(axi, coords, conn, color = abs.(fz), colormap = :jet, interpolate = false)
end
fig
Example block output

The mode indices (m, n) determine the number of azimuthal and vertical variations, respectively. Notice how modes with m = 0 are axisymmetric, while modes with m > 0 exhibit azimuthal nodal planes.

We can also visualize the real (or imaginary) part:

fig = Figure(size = (1200, 900))
for (idplot, (m, n)) in enumerate(modekind)
    stitle = L"TE_{%$m%$n}"
    ii, jj = plot_ids[idplot]
    axi = Axis3(fig[jj,ii], title = stitle, titlesize = 20)
    hidedecorations!(axi)
    fields = te_radial_fields(rcoords, ϕcoords, zcoords, H, m, n, 0.0, 1.0, 100e9, 1, 1)
    fz = getindex.(fields, 4)
    mesh!(axi, coords, conn, color = real.(fz), colormap = :jet, interpolate = false)
end
fig
Example block output

TM Modes

The following shows the Eρ field patterns for the first 12 TM modes:

fig = Figure(size = (1200, 900))

modekind = [(0, 1), (1, 1), (2, 1), (3, 1),
            (0, 2), (1, 2), (2, 2), (3, 2),
            (0, 3), (1, 3), (2, 3), (3, 3)]

plot_ids = Iterators.product(1:4, 1:3) |> collect |> vec
for (idplot, (m, n)) in enumerate(modekind)
    stitle = L"TM_{%$m%$n}"
    ii, jj = plot_ids[idplot]
    axi = Axis3(fig[jj,ii], title = stitle, titlesize = 20)
    hidedecorations!(axi)
    fields = tm_radial_fields(rcoords, ϕcoords, zcoords, H, m, n, 0.0, 1.0, 100e9, 1, 1)
    fz = getindex.(fields, 1)
    mesh!(axi, coords, conn, color = real.(fz), colormap = :jet, interpolate = false)
end
fig
Example block output

TM modes satisfy boundary conditions where Eρ = 0 at the top and bottom conducting plates (at z = 0 and z = H).

fig = Figure(size = (1200, 900))
for (idplot, (m, n)) in enumerate(modekind)
    stitle = L"TM_{%$m%$n}"
    ii, jj = plot_ids[idplot]
    axi = Axis3(fig[jj,ii], title = stitle, titlesize = 20)
    hidedecorations!(axi)
    fields = tm_radial_fields(rcoords, ϕcoords, zcoords, H, m, n, 0.0, 1.0, 100e9, 1, 1)
    fz = getindex.(fields, 1)
    mesh!(axi, coords, conn, color = imag.(fz), colormap = :jet, interpolate = false)
end
fig
Example block output

Wedge Waveguide

Wedge waveguides are angular sectors bounded by two radial conducting walls at angles φ = 0 and φ = φ₀, along with top and bottom parallel plates. These structures support modes with quantized azimuthal variations determined by the wedge angle. The mode parameter m must satisfy m = nπ/φ₀ where n is an integer, ensuring proper boundary conditions at the angular walls.

The following visualization shows the Hz field (longitudinal magnetic component) for the first 12 TE modes in a wedge with angle φ₀ = π/3 (60 degrees):

H = 1
R = 1

name = "../Assets/mesh/wedge_wg1.msh"

ϕ0 = pi/3
#wedgewg_mesh(H, R, ϕ0; dl = 0.3e-1, name = name)
coord, conn, connf = mesh_data_radial(name)
c_ids = unique(conn)
coords = coord[:, c_ids]
D = Dict(c_ids .=> eachindex(c_ids))
new_conn = map(x->D[x], conn)
xcoords = coords[1, :]
ycoords = coords[2, :]
zcoords = coords[3, :]
rcoords = map((x, y) -> hypot(x, y), xcoords, ycoords)
ϕcoords = map((x, y) -> atan(y, x), xcoords, ycoords)


modekind = [(0, 1), (1, 1), (2, 1), (3, 1),
            (0, 2), (1, 2), (2, 2), (3, 2),
            (0, 3), (1, 3), (2, 3), (3, 3)]

plot_ids = Iterators.product(1:4, 1:3) |> collect |> vec

fig = Figure(size = (1200, 900))
for (idplot, (m, n)) in enumerate(modekind)
    stitle = L"TE_{%$m%$n}"
    ii, jj = plot_ids[idplot]
    axi = Axis3(fig[jj,ii], title = stitle, titlesize = 20, azimuth = pi/5)
    hidedecorations!(axi)
    fields = te_wedge_fields(rcoords, ϕcoords, zcoords, H, ϕ0, m, n, 1.0, 0.0, 100e9, 1, 1)
    fz = getindex.(fields, 6)
    m1 = mesh!(axi, coord, connf, color = :gray)
    m2 = mesh!(axi, coords, new_conn, color = real.(fz), colormap = :jet)
end
fig
Example block output