My experience with Bloch boundary conditions comes from phononic materials, so I apologize that all of my references are in the context of elastodynamics. With that being said, I think there are three approaches you could use:
- Substitute the Bloch solution \boldsymbol{E}(\boldsymbol{x}) = \bar{\boldsymbol{E}} (\boldsymbol{x}) e^{i \boldsymbol{k} \cdot \boldsymbol{x}} into Maxwell’s equations and expand the spatial derivatives to rewrite the equations in terms of \bar{\boldsymbol{E}}(\boldsymbol{x}). The boundary conditions can then be expressed in terms of standard periodic boundary conditions \bar{\boldsymbol{E}}(\boldsymbol{x}) = \bar{\boldsymbol{E}}(\boldsymbol{x}+\boldsymbol{R}\boldsymbol{n}) (as opposed to a Floquet-Bloch boundary condition), since \bar{\boldsymbol{E}}(\boldsymbol{x}) is strictly periodic (not Floquet-periodic). The spatial derivatives of the Bloch propagator e^{i \boldsymbol{k} \cdot \boldsymbol{x}} give rise to additional terms in the weak form, see e.g. Eq. 2.13 of this paper for the weak form in the context of mechanics.
- If you use DOLFINx, I think you could probably use @dokken’s
dolfinx_mpc
to apply the Floquet-Bloch boundary condition via a multi-point constraint, i.e. by setting thescale
equal to e^{i \boldsymbol{k} \cdot \boldsymbol{x}} increate_periodic_constraint_geometrical
. However, I’ve never attempted this myself. - Use the formulation of #1 to set up the inverse eigenvalue problem k(\Gamma), a la Collet et al. Here, again, the appropriate boundary conditions are the standard periodic boundary conditions, and the Floquet-Bloch propagator is not needed.