How to implement Bloch-Floquet Boundary condition?

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:

  1. 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.
  2. 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 the scale equal to e^{i \boldsymbol{k} \cdot \boldsymbol{x}} in create_periodic_constraint_geometrical. However, I’ve never attempted this myself.
  3. 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.
2 Likes