Radiation Topology Optimization
Overview
An antenna or scatterer radiates electromagnetic (or acoustic) waves into the far field. RadiationTopOpt maximizes the power |probeᵀ E|² reaching a probe from a dielectric structure driven by a source, distributing the high-index material on the scalar Helmholtz equation. The material supplies the refractive index; ω is the angular frequency.
using RasmahMaximize radiated power
Place a point source at the centre, a probe near the far side, and let the optimizer arrange the dielectric to beam power into the probe.
m = tetrahedralize_box(1.0, 1.0, 1.0, 3, 3, 3)
n = size(m.nodes, 2)
mat = Material(youngs_modulus = 1e9, poisson_ratio = 0.3, density = 1.0, refractive_index = 2.0)
probe = zeros(n)
probe[argmin(abs.(m.nodes[1, :] .- 0.9))] = 1.0 # probe near x = 0.9
x, hist = solve(RadiationTopOpt(), m, mat;
probe = probe, ω = 2.0, volfrac = 0.5, max_iter = 20)([0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001 … 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001], [-211.56528508293692, -335.74059946938917, -395.3609680139798, -399.99503474542274])
Verification — the radiated power grows
The objective is the negative radiated power, so it decreases as the dielectric is shaped into an effective radiator:
println("objective: ", round(hist[1]; digits = 2), " → ", round(hist[end]; digits = 2))
println("radiated power grows: ", hist[end] < hist[1])
println("density in [0,1]: ", all(0 .<= x .<= 1))objective: -211.57 → -400.0
radiated power grows: true
density in [0,1]: true
vtk(m; field = x, fieldname = "dielectric density", edges = true)Next steps
- Electromagnetic wave eigenmodes — the resonance underneath.
- Acoustic cloak — the invisibility counterpart.
