Simulation Error for graphene pin junction simulation in DEVICE


I met an error when running the simulation. The simulation structure is a silicon pin junction with a graphene on the top of that. I used graphene material database from this file “Electro-optical modulator” from

I want to run the charge solver to see the results such as band structure, charge density, etc.

The error showing is that “Error (charge): Drift-diffusion solver failed to converge after 40 iterations, 0.365347(0.0001) remains. Error: there was an unknown parallel error. The error code is 9002, the process number is 0”.

I searched on KX forum, found the similar error and tried to alternate the charge solver settings, just like mesh min/max edge length, or global iteration limit, but there was still the same error.

The attached are the ldev file and log file describing the error. If there’s any question I have, please let me know. Thank you so much for helping me have a check on my file. Any suggestions are welcome.

Log file
SiG_PINjunction_1_p0.log (1.3 KB)

ldev file

Dear @dmao, My apologies for the late reply. I have taken a look at your files and I have a few points to discuss.

  1. First of all please note that the CHARGE solver is not designed to model transport in 2D materials. The material model for graphene that you are using were developed for simulations where there was no transport in the graphene layer and even there the results were only expected to be “reasonably accurate” not exact. In your simulation the graphene layer will have electrical transport through it so the model will not work properly (i.e. the results for transport inside graphene will most likely be wrong).

  2. You are applying a forward bias voltage to your pin diode. However the voltage value seems to be quite large (going up to 8V). Can you please confirm if that is what you intend to do?

  3. In case you do want to apply such large forward bias voltage, since there will be large current flowing in the system, you will have to use “newton” solver instead of “gummel”. You can change this from the “Advanced” tab of the CHARGE solver region.

  4. You also may need to make the voltage step smaller to help the solver converge.

  5. I would also recommend making the simulation region smaller in the z direction so the bottom silicon is not part of the simulation region. Since there will be no transport in that layer you might as well not include it in the simulation and make the simulation faster.

Let me know of your thoughts on these points.

Hi Ahsan,

Sorry for the late reply. Thank you so much for your response. Your
suggestion works. I still have some problems since I’m new in Lumerical
DEVICE and other simulation monitor.

This simulation model is to study the effect of graphene on a PIN junction
under different bias voltages. Bias voltages vary from 0V~10V to see the S
parameters, band diagram, and charge distribution of this structure.

  1. I know graphene is a kind of 2D material and DEVICE may not support
    simulation of such 2D material. I see from one example from here
    The graphene material database is referred from this example. But how
    should I model graphene in DEVICE correctly? Is this available in DEVICE or
    graphene can just be modeled in FDTD and Mode?

  2. I’ve changed the bias voltage range to 0V~0.5V to run the simulation and
    see the result. What simulation setting should I change if I want to see a
    larger bias later?

  3. What’s the standard for choosing newton or gummel solver type for
    different project in future? I just want to know this for future simulation.

  4. Generally, how to set the size of simulation area or region? Any
    standard or criteria?

  5. And for quickly mastering DEVICE simulation, do you have any good
    suggestion? Sometimes after modeling of the structure I want, I don’t know
    how to make the simulation settings correctly. Usually I search in the KX
    forum, but it may not work every time.

Sorry for the long response, looking forwards to your reply. Thanks.

Kindly Regards
Dun Mao

As I mentioned earlier, the CHARGE solver currently cannot model electrical transport in graphene. For optical simulation both FDTD and MODE are able to model graphene since they have the proper material model for this material. However you will not be able to perform he electrical simulation of your device with the CHARGE solver (since there will be some electron transport through graphene).

If you are using a larger bias later, first thing to do would be to change the solver to “newton” from “gummel” as the newton solver is more stable in simulations with large currents. Another thing to try (if you are having convergence issues) would be to use smaller voltage steps to reach the large bias you want.

“gummel” is the default option since it works for most simulations and is faster. “newton” solver should be used when you are running a simulation where large amount of current is flowing in your system. The newton solver is also the correct solver when doing a transient or small-signal simulation.

The simulation volume should be large enough the cover the active region and include at least potion of the metal contacts. If your structure is symmetric you can often use this to simulate half of the structure like in this example:

I would recommend downloading the project files from the different examples in KB and going through them step by step while following the instructions on the example pages. Since it looks like you are working on an optical modulator, check out the examples in this section of KB:

Hi Ahsan,

Sorry to bother you. I have some new problems on simulation.

In Lumerical DEVICE, if I want to see the band diagram, what should I do
for the simulation setting? In the monitor column, is the band structure
same or similar with band diagram? I open the band structure option, and
simulate my structure to see the result. But the figure seems not to have
the same forms as the band diagram figures as the attached. Do I need to do
some data processing works using the simulation result to generate the band
diagram figure? The simulation file (SiG_PINjunction_1) can be found here

I want to run some simulation on high bias, e.g. 8V~10V. And I modify the
simulation setting as you suggested, use the newton solver, and reduce the
bias step interval. But the simulation still stopped. Could you help me
figure out the problem? Simulation file (SiG_PINjunction_0_8VBias) can be
found here F:\DropboxDunMao\Dropbox\Lumerical

And is DEVICE able to simulate the hole concentration vs voltage for the
PIN junction? Refer to the Figure 2 b, c in the attached paper. If yes, how
to make the simulation setting?

Thank you.

Ultra-low voltage, ultra-small mode volume silicon microring modulator.pdf (1.17 MB)

Yes. The bandstructure monitor will give you the band diagram.

The result from the simulation region is a surface plot since it plots the bands over the entire simulation area. In order to see the more conventional band diagram (1D), use the bandstructure monitor.

Can you please share the web link to the file?

Yes. I believe what you are looking for can be done by placing a charge monitor on the waveguide. In the monitor there is an option to integrate the total charge over the volume/area of the monitor. If you enable this option, there will be an additional result available in the monitor called “total_charge”. This dataset has two results n and p. These will give you the total number of electrons and holes inside the monitor. In 2D case the unit will be /m (for the third dimension). You can then divide this number by the cross-section area of the waveguide to get the concentration in /m^3 or in /cm^3.

Sorry for the previous wrong address. For the high bias file with

simulation error, it can be found here(named “SiG_PINjunction_0_8VBias”).

I run the simulation with band structure monitor. The result is as you

said a surface plot over the entire area. Is that the conventional 1D band
diagram? Is it able to integrated Ev and Ec into one diagram?

And a few more questions. If I want to simulate a PIN junction with

different bias (e.g. 0~10V) using DEVICE, is it able to see the I-V
characteristic curve for the structure? If yes, how to see that?

And if I have discrete points of I-V generated from the experiment, is
DEVICE able to fit those points with a curve? If yes, how?

Thank you.

There was a problem with the doping profile in your file. Since the doping objects are terminated right at the surface of the semiconductor, the solver was failing to identify whether a point on the surface of the semiconductor is inside or outside the doping object in some regions. This problem can sometimes happen in DEVICE and the best way to avoid it is to extend the doping objects beyond the semiconductor surfaces ( To fix this problem I have just made the x span of the simulation region smaller to ensure that the points at the end gets doped.

Another issue that I noticed was that you were applying bias voltages on both anode and cathode at the same time. The proper way to apply bias would be to set one contact to ground and then apply a voltage sweep in the other contact.

Another change that I made was to resize the simulation region so that it includes a smaller portion of the vias (you do not need to include it all) and to include a bit of the oxide below the silicon slab (to allow any electric field that may exist in the layer immediately below the silicon).

Finally I enabled “Fermi statistics” in the advanced tab of the solver region to ensure the carrier concentration is calculated properly at heavy injection.

Here is the modified file that I was able to run from 0 to 8 V: SiG_PINjunction_0_8VBias_MOD.ldev (6.4 MB)

The result is the conventional band diagram. However since it is a surface plot and not a line plot, you cannot put two of them together.

The I-V characteristic is reported as a result in the solver region. The name of the dataset will be the same as the name of the contacts (one dataset per contact).

DEVICE when plotting the results simply connects two consecutive data points with a straight line. There is not fitting involved.

Thank you so much Ahsan. I see for the band structure, the plot type in
visualizer in the project file is the “surface”. How can I change to the
“line” for the plot type?

For bandstructure result directly from the CHARGE solver region, “surface” is the only allowed type. For data from the “bandstructure” monitor you can switch from “surface” to “line” from the plot edit window.

For the project file you send me, in the band structure visualizer, the
plot type is only valid for surface option. The line option is in grey
color which means unavailable. How to make it available? Thanks.

Hi @dmao, I am guessing that you are still looking at the bandstructure data from the CHARGE solver. As I mentioned in the earlier post, the data from the CHARGE solver only has the “surface” option and not the “line” option. If you look at the result from a “bandstructure monitor” then you will have the “line” option available.

Also note that the plot that I shared in the previous post was just meant to show the radio button to switch to the “line” option. The plot itself is not from your file. In your file I noticed that the bandstructure monitor do not return any data. This is because the monitor is placed completely inside the solver region (i.e. the end points are inside the simulation region). In such cases sometimes the 1D monitors fail to record the data at the end points since they do not land on any grid points or any element edges. If you simply extend the monitor so that it goes through the simulation region boundaries (and therefore the end points of the monitor lands on the edges of the elements at the boundary), you will get data in the monitor and you can do a line plot for those data.

Hi Ahsan, sorry for another question about band structure.

After the simulation, for the result of band structure visualizer, when I
export the data, the data in the file seems a little messy. Is there a
tutorial in the website showing how to export the band structure data and
visualize it in matlab? I don’t understand what several groups of data
exported from the visualizer represent. Thanks.

Can you please confirm whether you are talking about data from the CHARGE solver region or data from a monitor?

I mean, data from band structure visualizer. I want to export the data from
this visualizer, but confuse by the massive data. I see there are some
groups of data from the exported .txt file. I don’t know which group of
data can be used in the matlab for visualization. Importing the exported
data into matlab for visualization may be more convenient to manipulate or
see in our desired way.

Ec.txt (2.27 MB)

Any spatial data you get from the CHARGE solver region (and also from any 2D or 3D monitor) are finite element data and they so have a complex structure (quite different from the rectilinear data in FDTD). In order to see how you can get the finite element data into a more manageable format (on a rectangular grid) take a look at this post: Interpolate finite element data onto a rectilinear grid. If you want to take the data to matlab and directly plot it there you can do that too. You will just have to separate the different data (vertex data, connectivity matrix, and actual data) as mentioned in the above post and then export them to matlab. Let me know if you need more information.

Hi Ahsan,

I looked your recommended post from the link. In order to plot the data in
matlab, is writing script to plot it out the only way to do that? Is it
possible to plot the data in matlab using the exported .txt file? If yes,
how to do that? I exported the data with .txt form, but the data in the
.txt file seems a little messy. In each .txt file I export, there are two
groups of data, are they the vertex data and connectivity matrix? Thanks.


Hi Dun,

The data you save in the text file is in a format that we use in our solvers and I do not thing Matlab can handle it as it is. That is why you need to separate the different parts of the data (main data, vertex data, and element data) using script and then send them to Matlab. Once the data is in Matlab you can use commands like trisurf to plot the data.

Let me know if you face any difficulty while doing this.