Closed mountqi closed 11 months ago
In Meep, a broadband planewave source at oblique incidence in a periodic structure generates planewaves at different angles. This is described in Section 4.5 "Efficient Frequency-Angle Coverage" of our book chapter https://arxiv.org/abs/1301.5366. As shown in Fig. 4.7, it is straightforward to compute the angle dependence of the output from e.g. the reflectance spectrum and then to perform additional simulations to generate results to span the entire angular parameter space.
The approach described in IEEE Trans. Antennas & Propagation, vol. 62 , pp. 354-360 (2014) requires defining a new field and update equations which would be non-trivial to set up in Meep. Given its limitations (particularly the requirement that Δt be reduced to preserve numerical stability as well as limited applicability to dispersive materials, etc.), it does not seem to be of much practical use to justify the effort of supporting it.
Yes, that paper makes the field update equations more expensive everywhere in space.
As an alternative, it occurred to me that it might be possible to implement frequency-dependent Bloch periodic boundary conditions to impose a frequency-independent angle. In particular, for an angle θ, you really want Bloch-periodic boundary conditions
for frequency-domain electric/magnetic field components û(x,ω), period a, refractive-index n, and frequency-dependent Bloch phase kₓ = ωn/c sin(θ). Let τ = na sin(θ)/c. In the time domain, this corresponds to a delayed boundary condition:
u(a,t) = u(0, t – τ)
To implement this in the time domain, you would need to store τ/Δt = na sin(θ)/cΔt = na sin(θ)/SΔx timesteps worth of information (where S is the Courant factor), but only for the boundary points. Since this is proportional to a/Δx, it requires storage proportional to the whole computational cell, so it has similar memory scaling to the Liang (2014) paper (though the constant factor might be better thanks to the sin(θ) factor) … but on the other hand the computational cost is much cheaper (because essentially there is no additional computational cost in the bulk, and the boundary condition is still cheap).
(The other advantage of the above approach is that it requires no modification to the timestepping, since the only change is to the boundary conditions. Similarly, it should require no change to Δt.)
PS. Note that for θ < 0, you just need to flip the directions of the boundary conditions to u(a,0) = u(a, t + τ) since τ < 0.
One problem with the proposed scheme above is that we need to update boundary conditions in both directions. e.g. we need to update u(a,t) from u(0, t – τ) but we also need to update v(0,t) from v(a, t + τ) for different field components u and v, which seems non-causal for at least one component?
Lumerical FDTD Solutions supports BFAST source, which enable broad band simulation with oblique incident wave.
BFAST
Is there any similar implementation in meep?