simulation failing with error message:error during matrix solve



Dear aalam
when I run the device,I get an error .the error code:

can you help me how to solve the question?Thanks!


Hi. The error message indicates that the solver most likely diverged. If it is indeed a convergence issue then the source could be a lot of things. A few general things to check,

  1. Make sure the final geometry and the doping profile looks okay, specially check if the doping is getting applied at the surfaces.

  2. Check if the mesh looks fine enough.

  3. Check the simulation at zero bias first. If you need results at non-zero bias then use a sweep to increase the voltage gradually.

These are just some general guidelines. If you still have problem then feel free to share the file and I can take a look at it.


dear alaam
I will have a try according to your suggestion.Thanks a lot


dear aalam
thanks for your suggestion.but I can’t solve this is my device file.what’s wrong with my device file.can you help me find it .Thanks a lot.1.ldev (5.8 MB)


Hi. I was able to run your file without any issue by following steps 1 and 3.

  1. When I checked the doping, I noticed that the doping at the bottom surface goes to zero at some regions. Spotting this is not always easy. What I do is I select the “Abs” option to make the data positive. Then I choose log plot (log10y). Any points with zero doping (undoped) is then ommitted from the plot and you can see if doping is missing somewhere. The solution is simple. Just pull the edge of the doping object slightly beyond the edge of the silicon.

  1. The bias at cathode was going from -2 to 2 V. As mentioned in point 3, if you are having convergence issues, start at zero and then go towards nonzero bias. I was able to get the simulation run from 0 to 2 V without any further modifications.

NOTE: If you need the data to go from -2 to 2 V and can’t get it to work that way then run two simulations for 0 to 2 V and o to -2 V and then use script commands to combine the data. You can find a similar example here:


dear aalam
I have solved this problem with your advice.Thanks very much for your help.a few days ago,I have ask you about the InGaAs PD example on your website. Do you make some progress on the transit time of PD.Hoping to get your feedback.Thanks


dear alaam
although the simulation works OK when the voltage goes from 0V to 1V, it can’t work well when the voltage goes from 0V to -1V.can you help me solve this problem?


Hi. When you are applying voltage from 0 to -1V, you are putting the diode in forward bias. In forward bias, the change in current will be very rapid and using a smaller step size will help. Please let me know if a smaller step size helps.


I am still working on the transient simulation of the UTC photodiode. I will update the post as soon as I have it working. Thanks for waiting.


dear aalam
I have used a smaller step size under your guidance,I changed the voltage step from 0.1V to 0.01V two days before,but it didn’t work.The problem still be there and I don’t have any idea of it.can you help me? Thanks a lot.


Hi. I could not reproduce the convergence problem. When I fix the doping in your file (as mentioned earlier) and apply a sweep from 0 to -2 V in steps of -0.1 V, the simulation runs fine. I am attaching the modified file here for you: 1_mod.ldev (5.7 MB). Please run this and let me know if you have any problem.


dear aalam
that is OK.Thanks a lot!


Dear aalam, I am also facing same problem while doing device simulation. I have followed your above instruction to solve
the error “Error during matrix solve” but I couldn’t succeeded. Could you look on my simulation? I attached simulation file here. Thank you very much for your effort, and looking forward to hearing from you.

SG_aSi_Thi.mat (3.0 MB)
Manuel_Device.ldev (5.5 MB)


Hi @mj.mendes, Thanks for sharing the files. I’ve taken a look at your project file and I believe you are getting this error because the doping objects are not properly getting applied at the surfaces of the semiconductor region (specifically at the bottom surface N = 1e2)

This problem sometimes occur when the doping object ends right at the edge of the semiconductor. Due to numerical precision the solver sometimes fail to apply the doping at the nodes on the edge. One easy way to avoid this problem is to extend the doping objects slightly beyond the semiconductor and into the metal/insulator. Since doping do not get applied in metal or insulator in DEVICE, this will not affect the simulation results in any way but will ensure that the semiconductor edge gets doped properly. When I extended the “p dope” and the “n diff” objects slightly into the top and bottom metal regions, I was able to run the simulation without any issue and the resulting doping profile looks fine as well.

A few other points that I wanted to mention are listed below:

  1. I noticed that you have labeled the material you have created as aSi. This along with the values of the material properties tells me that you are using amorphous silicon as the active material in your simulation. Please note that when it comes to simulation with a-Si, the CHARGE solver has some limitations that may result in inaccurate results. The main limitation comes from the fact that the CHARGE solver only deals with crystalline semiconductors with a fixed bandgap which is not the case for a-Si due to the presence of band tails within the bandgap. These exponentially decaying band tails and dangling bands deep inside the bandgap results in additional recombination mechanisms that are also not modeled by the CHARGE solver.

  2. I also noticed that you have created different material for n-type, p-type, and intrinsic silicon. In these models you have used different work-functions. Please note that the material model should always use the work function of the intrinsic semiconductor as the CHARGE solver automatically re-calculates the work function shift due to applied doping (see this KX post: Semiconductor work function in DEVICE).

Simulation Error for graphene pin junction simulation in DEVICE

A post was split to a new topic: Script commands to calculate EQE of solar cell as a function of wavelength