How to simulate layered hyperbolic metamaterials



I am trying to replicate the structure in this paper,it is layered Hyperbolic metamaterial.
Hyperbolic metamaterials.pdf (4.1 MB)

1-I want to excite my structure with TM mode how can i choose TM?

2- if the source is oblique which will make the structure unstable is there a way to make it more stable , also i do not how to choose wave length to excite my the hyperbolic structure?

3- for semiconductors should i use conformable variance 0 or 1, and the meshing should it be on top or all Hyperbolicmetamaerial?


Hi Mai,

For layered structures I recommend looking at this simple KB example of a 4-layer stack.

Regarding your questions, these are some comments and suggestions:

You need to choose the polarization of the source relative to the plane of incidence. The blue arrow in the source tells you the orientation of the E-field. In the 4-layer example mentioned above, the blue arrow of the source is pointing in the z direction, perpendicular to the plane of incidence (XY); this corresponds to TE polarized light. In the source settings you can see that the polarization angle is set to 90 degrees. If you change this angle to 0 degrees, then the E-field vector lies on the XY plane and so you have TM polarized light.

I am not sure I understand what you mean by unstable. Do you refer to the stability of the simulation for oblique incidence?

The wavelength can be chosen in the source settings > Frequency/Wavelength tab.

The choice of conformal mesh type depends on whether you have interfaces involving metals or PEC as explained here.

Since the structure is formed by thin layers, I would use a mesh override region for them so that you can control the number of mesh points inside the layers.

We have some useful getting started examples that take you step-by-step through the basic simulation settings; you might want to look at some of these examples. Also, we have some advanced metamaterial examples.


I attahed my FDTD file to check with you some stuff. first i am replicating this structure Hyperbolic metamaterial of Si:InAs as metal and InAs as dielectric. on InAs on GaAs substrate.
Hyperbolic metamaterials.pdf (3.9 MB)

i have several issues;
1- the source wave length am i selecting the right source wave length to probe my structure, ? also when i ever i made the dimension of source in x and y direction small then i run, the FDTD extends the dimension from its own to (-8, 8 in x and y direction ) which is weird.
2- the location of T and R monitors, normally the R should be outside the Source region and T after the source but is it the same in metamaterial ? since in metamaterial it is my effective medium and i do not know should i place all monitors inside it or leave them the way they are?

3- the field monitor does not get any data?

4- the material data for Si: InAs were calculated by matlab,even though they agree with the values in the paper, they fit badly with the modal in FDTD. So , does this affect my simulation?since i am still too far from the R and T in the paper?

sweep_4.fsp (269.0 KB)


Hi Mai,
Nice to E-meet you,
Regarding your questions:

  1. Since you are using a plane wave type of Bloch/Periodic, the source x span should extend to the FDTD region. That’s why it automatically changes. If you choose the type to be “Diffracting”, then you can put the desired dimensions. However, probably this is not what you need. You need block source to model the angled source.

  2. Mai, the source here is not TFSF. So it has no region. I am not getting your point here.

  3. I ran the simulation and all field monitor are okay. May be that’s a problem with the memory of the PC.

  4. Do you mean that you entered the data you have in FDTD and added it as a new material and the Analytical polynomial model of the FDTD doesn’t fit well to data points?? If so, then yes, it should affect your simulation.


Hello @maisaad ,

As @aya_zaki mentioned, you should use Bloch periodic boundary conditions because you are simulating a planar structure (so I think it is safe to assume the layers extend to infinity). In the simulation file you sent, you used PML boundaries; this will result in a finite size source and undesired edge effects.

When you have angled incidence and Bloch periodic boundary conditions, the injection angle depends on the frequency as explained here. Strictly speaking, only the center frequency is injected at the desired angled. If the frequency range is not too large, the error introduced by this issue might not be significant but in your case you end up with a broad range of injection angles as you can see in the “Beam options” tab of the source settings:

Furthermore, you have injection at very steep angles, which will cause instability in the simulation because light cannot be easily absorbed at those angles. To get more accurate results you can sweep over single-frequency simulations or use BFAST.

Regarding the material fit for Si:InAs, I noticed that the data you used to created the material is not in the correct wavelength range. The wavelengths you have in the material data are around 1e-11m, so I think there was some confusion with the units when loading the sampled data.

My final suggestion would be to use stackrt to get the transmission and reflection results analytically before doing the FDTD simulation. You can use the stackrt results to compare with the paper and then also use them for checking your FDTD simulation.


first i am confused ;
1- aya was taking about using plane wave source type Block, but you are saying, i should use Block boundary conditions which is different thing. in addition my structure is not periodic to use the Bloch boundary conditions, that is why i am using PML.
Also i can not use Beast , it is written that it is used only for periodic structures.

2- the data are correct, from 2 to 18 microns wavelength as in the paper. which is *1.8 *10^-11 m.but generally it does not fit with the modal of FDTD.

3- i changed the setting in advanced option of FDTD to set simulation band width but still the FDTD modal does not fit with my data…


Mai, please check this post

BFAST source can also be used for non-periodic structures. Think of the extended layers as a structure repeating itself many times.

Regarding the confusion of Bloch being for the plane wave type or the boundary conditions type, I urge you to read this page

Bloch boundary conditions are required when using a plane wave source injected at an angle. Bloch boundary conditions are similar to periodic boundary conditions, but they take into account a phase change across each period.

Hope this is helpful!
I will have a look on the data fit and get back to you.


Hi Mai,
I think the units of the wavelength are incorrect… The region defined for the material is in the pico meter wavelength range.


sweep_4 - 30-bloch.fsp (3.0 MB)

yes i corrected the material fit,
i changed the BC and the source plane wave to BAFST.

I changed the setting of FDTD, advanced tab , "set simulation bandwidth " and the same for mesh.
also i am using steep angle in FDTD.

the results of R are close to correct ones , but the simulation ends at 5 % it does not continue the 100 %.
i think it is still unstable, increasing mesh accuracy or simulation time does not solve the problem.

what do you think?


No, it is stable. Having a look at the time monitor, it is clear the simulation continues till the power totally decays. So the Auto shutoff stops the simulation.

To make sure of this, check the log file. This is a txt file that gets generated in the same workspace.


yes this termination means it is unstable.
i tried the things mentioned in this link to avoid divergence.
1- i decreased the stability factor to 0.5
2- increased PML
3- increased Kappa
4- reduced sigma
5- increased the tolerance of material fitting.

but it still diverges …
…any recommendations…


Hi @maisaad,

As @aya_zaki mentioned, your simulation is stable. The early termination means that the energy in the simulation region (measured by the autoshutoff level) decreased to a small enough value such that it is safe to stop the simulation. The minimum autoshutoff value can be modified in the FDTD settings; in most cases 1e-5 is a reasonable value:

You can read more about the autoshutoff level here:

I have one additional comment regarding the material fit. In the range of wavelengths you are interested, 2 - 12um, there is a gap in the permittivity data for InAs from Palik:

In order to get a reliable material fit throughout the desired wavelength range, it would be better if you can find material data for the missing wavelengths.

Hope this helps!