RasmahRasmah

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 Rasmah

Maximize 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