TopologyOpt
Filtering, projection, and constraint functions for topology optimization.
Material Interpolation
DistributedEmitterOpt.christiansen_ε — Function
christiansen_ε(p, nf, nm) -> ComplexChristiansen refractive index interpolation: n(p) = nf + (nm - nf) * p ε(p) = n(p)²
This gives: p=0 → ε = nf² (fluid) p=1 → ε = nm² (metal)
DistributedEmitterOpt.∂christiansen_ε — Function
Derivative: ∂ε/∂p = 2n(p)(nm - nf)
Filtering (2D Grid)
DistributedEmitterOpt.filter_grid — Function
filter_grid(p_vec, sim, control) -> VectorFilter design vector using 2D convolution.
Arguments
p_vec— Flat design vectorsim— Simulation (for grid dimensions)control— Control (for filter params)
DistributedEmitterOpt.filter_grid_adjoint — Function
filter_grid_adjoint(∂g_∂pf, sim, control) -> VectorAdjoint of filter operation (same as forward for symmetric kernel).
Filtering (3D Helmholtz)
DistributedEmitterOpt.filter_helmholtz! — Function
filter_helmholtz!(p_vec, cache, sim, control) -> VectorFilter design using Helmholtz PDE (3D DOF mode). Caches factorization in cache.F_factor.
DistributedEmitterOpt.filter_helmholtz_adjoint! — Function
filter_helmholtz_adjoint!(∂g_∂pf, cache, sim, control) -> VectorAdjoint of Helmholtz filter. Since A is symmetric: A^(-T) = A^(-1), so adjoint solve = forward solve.
Projection
DistributedEmitterOpt.project_grid — Function
project_grid(pf_vec, sim, control) -> VectorProject filtered design to binary-ish values (2D DOF mode).
DistributedEmitterOpt.project_grid_adjoint — Function
project_grid_adjoint(∂g_∂pt, pf_vec, control) -> VectorAdjoint of projection: chain rule through tanh.
DistributedEmitterOpt.project_fe — Function
project_fe(pf_vec, sim, control) -> ComposedFunctionConvenience wrapper: build FEFunction from vector and apply SSP projection.
DistributedEmitterOpt.project_ssp — Function
project_ssp(pf, control) -> ComposedFunctionSubpixel-smoothed projection on the FEM mesh (SSP is ALWAYS used). Returns a ComposedFunction for lazy evaluation in Gridap.
Constraints
DistributedEmitterOpt.glc_solid — Function
glc_solid(x, grad; sim, control) -> Float64Solid linewidth constraint for NLopt. Constraint satisfied when ≤ 0.
DistributedEmitterOpt.glc_void — Function
glc_void(x, grad; sim, control) -> Float64Void linewidth constraint for NLopt.
DistributedEmitterOpt.glc_solid_fe — Function
glc_solid_fe(p_vec, grad, obj) -> Float64Solid linewidth constraint for NLopt (3D DOF mode).
DistributedEmitterOpt.glc_void_fe — Function
glc_void_fe(p_vec, grad, obj) -> Float64Void linewidth constraint for NLopt (3D DOF mode).