Frequencies converge from above as the real-space grid is refined: at low resolution, the dielectric step is poorly resolved and shifts band edges upward by a few percent. A convergence sweep is the cheapest way to pick a working resolution: keep doubling until the band edges stop moving within your target tolerance.
1import blaze
2
3# Increase the grid resolution and watch the bands converge.
4results = blaze.solve(
5 lattice_type="square",
6 resolution=[16, 48, 16],
7 epsilon_background=1.0,
8 epsilon_atoms=8.9,
9 radius_atom=0.2,
10 polarization="TM",
11)
12
13for r in results:
14 print(f"res={r.resolution}: band1 max = {r.freqs[:, 0].max():.5f}")