@@ -42,6 +42,10 @@ SPDX-License-Identifier: Apache-2.0
4242 {
4343 ...
4444 },
45+ "FloquetPort" :
46+ [
47+ ...
48+ ],
4549 "SurfaceCurrent" :
4650 [
4751 ...
@@ -121,6 +125,15 @@ wave port boundary mode analysis, overriding any other boundary condition assign
121125attributes. Only relevant when wave port boundaries are specified under
122126[ ` config["Boundaries"]["WavePort"] ` ] ( #boundaries%5B%22WavePort%22%5D ) .
123127
128+ ` "FloquetPort" ` : Array of objects for configuring Floquet port boundary conditions for
129+ periodic structures. Floquet ports provide absorbing boundary conditions for diffraction
130+ gratings and other periodic electromagnetic devices, enabling the computation of
131+ diffraction efficiencies (S-parameters) for multiple propagating orders. Floquet port
132+ boundaries are only available for frequency domain driven simulations and ** require periodic
133+ boundary conditions** to be configured under
134+ [ ` config["Boundaries"]["Periodic"] ` ] ( #boundaries%5B%22Periodic%22%5D ) with exactly two
135+ ` "BoundaryPairs" ` (periodicity in two transverse directions).
136+
124137` "SurfaceCurrent" ` : Array of objects for configuring surface current boundary conditions.
125138This boundary prescribes a unit source surface current excitation on the given boundary in
126139order to excite a frequency or time domain driven simulation or magnetostatic simulation.
@@ -482,6 +495,62 @@ with
482495impedance, absorbing, or conductivity boundary condition that may be assigned to the same
483496attributes for the purpose of the 2D wave port boundary mode problem.
484497
498+ ## ` boundaries["FloquetPort"] `
499+
500+ ``` json
501+ "FloquetPort" :
502+ [
503+ {
504+ "Index" : <int>,
505+ "Attributes" : [<int array> ],
506+ "Excitation" : <bool>,
507+ "IncidentPolarization" : <string>,
508+ "MaxOrder" : <int>
509+ },
510+ ...
511+ ]
512+ ```
513+
514+ with
515+
516+ ` "Index" [None] ` : Index of this Floquet port, used in postprocessing output files.
517+
518+ ` "Attributes" [None] ` : Integer array of mesh boundary attributes for this Floquet port
519+ boundary. The port face must be planar and lie on the true boundary of the computational
520+ domain (one-sided, like wave ports). The medium adjacent to the port must be homogeneous
521+ and isotropic.
522+
523+ !!! note "Periodic boundary conditions required"
524+
525+ Floquet ports require periodic boundary conditions
526+ ([`config["Boundaries"]["Periodic"]`](#boundaries%5B%22Periodic%22%5D)) with exactly
527+ two `"BoundaryPairs"` defining periodicity in the two transverse directions. The
528+ `"FloquetWaveVector"` in the periodic configuration determines the angle of incidence:
529+ zero for normal incidence, nonzero for oblique. The wave vector is specified in radians
530+ per mesh length unit.
531+
532+ ` "Excitation" [false] ` : Turns on or off port excitation for this Floquet port boundary.
533+ When excited, a plane wave in the specular (0,0) diffraction order is injected with unit
534+ power.
535+
536+ ` "IncidentPolarization" ["TE"] ` : Polarization of the incident plane wave. Available
537+ options are:
538+
539+ - ` "TE" ` : Transverse electric (s-polarization). Electric field perpendicular to the
540+ plane of incidence.
541+ - ` "TM" ` : Transverse magnetic (p-polarization). Electric field in the plane of
542+ incidence.
543+ - ` "RHC" ` : Right-hand circular polarization. Equal superposition of TE and TM with
544+ 90° phase shift: `` \mathbf{E} = (\hat{e}_\text{TE} + j\hat{e}_\text{TM})/\sqrt{2} `` .
545+ - ` "LHC" ` : Left-hand circular polarization. Equal superposition of TE and TM with
546+ -90° phase shift: `` \mathbf{E} = (\hat{e}_\text{TE} - j\hat{e}_\text{TM})/\sqrt{2} `` .
547+
548+ ` "MaxOrder" [-1] ` : Maximum diffraction order index to include. With ` MaxOrder = M ` , all
549+ orders `` (m, n) `` with `` |m| \leq M `` and `` |n| \leq M `` are included, each with both TE
550+ and TM polarizations. A value of ` -1 ` (default) enables automatic selection. A value of ` 0 `
551+ includes only the specular (0,0) order. Higher values are needed when the periodic cell
552+ supports propagating higher-order diffraction.
553+
485554## ` boundaries["SurfaceCurrent"] `
486555
487556``` json
@@ -599,6 +668,7 @@ boundary.
599668"Periodic" :
600669{
601670 "FloquetWaveVector" : [<float array> ],
671+ "FloquetReferenceFrequency" : <float>,
602672 "BoundaryPairs" :
603673 [
604674 {
@@ -631,7 +701,28 @@ to the receiver attribute in mesh units. If neither `"Translation"` or `"AffineT
631701specified, the transformation between donor and receiver boundaries is automatically detected.
632702
633703` "FloquetWaveVector" [None] ` : Optional floating point array defining the phase delay between the
634- periodic boundaries in the X/Y/Z directions in radians per mesh unit.
704+ periodic boundaries in the X/Y/Z directions in radians per mesh unit. When used with
705+ ` "FloquetReferenceFrequency" ` , it is defined at the reference frequency.
706+
707+ For a Floquet port, this is the tangential component of the incident wave vector. For example,
708+ for a port normal to z with periodicity in x and y, the ` "FloquetWaveVector" ` ,
709+ `` \bm{k}_{F,\mathrm{ref}} `` , can be computed from the incidence and azimuthal angles as
710+
711+ ``` math
712+ k_{F,\mathrm{ref},x} = k_\mathrm{ref}\sin\theta\cos\phi,\qquad
713+ k_{F,\mathrm{ref},y} = k_\mathrm{ref}\sin\theta\sin\phi,
714+ ```
715+
716+ where `` k_\mathrm{ref} = \frac{2\pi f_\mathrm{ref}}{c_0}\sqrt{\mu_r\varepsilon_r}, `` , where
717+ `` f_\mathrm{ref} `` is the ` "FloquetReferenceFrequency" ` , `` \theta `` is the incidence angle away
718+ from the port normal, and `` \phi `` is the azimuthal direction in the periodic plane.
719+
720+ ` "FloquetReferenceFrequency" [None] ` : Optional frequency in GHz at which the
721+ ` "FloquetWaveVector" ` is defined. When specified, the Bloch wave vector scales linearly with
722+ frequency during a driven simulation frequency sweep,
723+ `` \bm{k}_F(f) = \bm{k}_{F,\mathrm{ref}} f / f_\mathrm{ref} `` , preserving the incidence
724+ angles across the sweep. When not specified (default), the wave vector is held constant
725+ across all frequencies. Only supported for driven simulations.
635726
636727## ` boundaries["Postprocessing"]["SurfaceFlux"] `
637728
0 commit comments