PC bandstructure example in Lumerical MODE and how to define Brillouin zone for hexagonal structure



I was simulating the PC bandstructure example which has been provided by lumerical in which I noticed that if I change my change the “bandwidth” option (under the Effective index tab of the “PROP” simulation region) to “broadband”. The simulation diverges and stops.

Here is the link: https://kb.lumerical.com/en/diffractive_optics_waveguide_pcbandstructure.html

I have only tried the files with hexagonal lattice structure.

Moreover, I have one more query, I wanted to change the refractive index of the core to some value of 2.41 (refractive index of diamond), but if I run the simulation and then the script file. I see that I cannot change the axis limits of the plots and as a result I cannot see the bandgap properly.

Here is my simulation files with refractive index changed:
planar_hex.lsf (3.0 KB)
plannar_hex.lms (1.7 MB)

Here is the result I got:

Can anybody please help me to resolve this!


Photonic Crystal Waveguide for Green Light

Hi @sourangsu.banerji

The divergence seems to be resulted from the material fitting. If you use other values for example max coefficient of 3 and imaginary weigth of 1 it should work. This is being said that since you are using a constant value for (n,k) real and imaginary refractive index, you don’t need to use the broadband bandwidth tab.

I didn’t have any problem setting the axis limits. Can you please clarify what the problem is?

Here is the screenshot how I modified the axis limits in two plots:


@bkhanaliloo Thanks for your reply! I think I could not explain my problem probably. By setting the axis limits I meant to say, if you look into this paper:
oe-16-3-1632.pdf (552.9 KB)

You will see from Figure 2. that the photonic band gap occurs in much higher range for n = 2.41 but I cannot get a similar plot from my simulation. The figure (f in terms of (c/a) v/s k only calculates till 0.4.

I hope you got the problem to what I am referring to?


Hi @sourangsu.banerji

Sorry for misunderstanding. You can increase the frequency range frm Edit analysis tab as is shown in the figure below:

Here are the plots of the results:

I hope this answered your question.


@bkhanaliloo…Thank you so much! I was thinking can you provide the Lumerical FDTD solutions file for this?

I wanted to do the same thing with Lumerical FDTD also. I know the computations time would be much larger.


Hi @sourangsu.banerji

I am glad that I could solve the problem.

Unfortunately I don’t have the files for FDTD simulations, however you can find examples from KB. Please go ahead and prepare the simulation file and let me know if you had any questions.

Best of luck


@bkhanaliloo…Thank you very much! I got what I needed from the link that you provided.

I was able to get same results from the following files:
planar3D_hex.lsf (2.8 KB)
planar3D_hex.fsp (1.7 MB)

I don’t whether this is a right forum to continue the discussion or not (I will create a separate one, if needed) , but my actual goal is to create a photonic crystal waveguide in which I would propagate only green light (532nm).

Now the band structure that I got from planar3D_hex file is as follows:

The material I am using is diamond (n=2.41) which gives me a photonic bandgap for normalised frequency of 0.38 to 0.42 (c/a).

So do you have any examples where I can look into for fabricating the photonic crystal waveguide in FDTD solutions?


Hi @sourangsu.banerji

This KB direct has an example that explains how you can simulate a PC cavity in FDTD and acquire resonance frequency and quality factors.



Hi @bkhanaliloo…thanks!


Hi, I am currently new to this topic and I also have questions on band-structure calculation in the following example:

Lumerical provides two examples one planar_square lattice and one planar_hex.
However it seems the script for planar_square only calculate sigma to X without remaining X to M then back to sigma.
Is that means the generated bandstruture is not a complete one and I should follow planar_hex example to modify the code if I wish to have a complete plot?

In addition, I don’t understand how Kx and Ky sweeping range is setup, especially in planar_hex example.
For planar_hex, sigma to M then back to K is used to plot then complete bandiagram. However the sweeping limit is chosen 0.33 for Kx and 0.577 for Ky. Any partticular reasons for choosing these values? I thought the sweeping range may be determined by lattice constants ax, ay or r but I did not find any clear relations.

Also, If I am working back to plane_square and I am also not clear why kx sweeping up to 0.5 is used.(=lattice constant?)
What if lattice becomes rectangular such as ax=1.5ay? How should Kx and Ky sweeping range be adjusted in order to plot the complete band structure?

Arthur Teng


Dear @mteng

Sorry for delayed reply.

Yes, that is correct. For planar square, bandstructure is calculated only from gamma-X. If you want to calculate band structure for X-M and M-gamma, you will need to add parameter sweep to sweep over kx and ky, similar to as we have for planar-hex example. The difference is that kx and ky values will vary from 0 to 0.5 for planar square (which I explained it below).

These parameters are chosen based on irreducible Brillouin zone. For a good reference to learn how to sweep over kx and ky for different trajectories (gamma-M-K-gamma) over the Brillouin zone, you can take a look at Photonic Crystals Modeling the flow of light_ by John D. Joannopoulos (I think this book is open source and you should be able to find .pdf version online). In page 237, for hexagonal structures, we have:

Gamms, M, and K points are defined as is shown in below figure:

Since spacing between lattice points in a triangular lattice is a, and from hexagon structure, these points in reciprocal coordinates can be defined as:

gamma=[0, 0]
M = 2*pi/a [0, 1/sqrt(3)]     = 2*pi/a [0,    0.577]
K = 2*pi/a [1/3, 1/sqrt(3)]   = 2*pi/a [0.33, 0.577]

If you open the plannar_hex.lms simulation file, you can see that spacing between circles is a. kx and ky are defined based on the periodicity from the edit tab of Model analysis group (here periodicity is defined to be ax instead of a):

For rectangle structure, you will need to define ax and ay for periodicity along x and y direction, respectively. These two values are random (fro example ax can be defined as ax=1.5ay). Then, you can define k vectors as:

Kx = 2*pi *kx/ax;
Ky = 2*pi *ky/ay;

Where sweep will be performed over kx and ky values from 0 to 0.5. Square lattice is a simplified version where ax=ay.

I hope this answered all of your question, but please feel free to ask if you have further questions.