The 2023 list of quantum device simulation


With all this fuss about quantum things, I think it’s high time I updated the list of simulators post I did some years ago. I am completely remaking this post, instead of adding to the previous, because now things are more clear to me and to the community at large where each subdomain lies. Since this will be a list from my own experience, feel free to contact me with the software that you would like to see added in this list.

Also, it’s a list for technologies that can host Quantum Information carriers based on solid state device types, that is: semiconducting, superconducting, or even photonic. That is, with the possibility of inclusion of materials science and effects like topological. It is not about trapped ions and optical lattices, although apparently, you can do that too with Wannier functions, a method I will mention here.


In any type of solid state simulation, the materials play a fundamental role. However, we don’t always have to do some quantum mechanics simulation for different materials in order to do a simulation of the final device. This is because many of the effects get ‘wrapped up’ in simple variables, or do not affect the performance of the device.

Continue reading

Automating device data analysis

Lately, there have been some efforts to incorporate machine learning in experimental measurements, which are generally quite known in the community, and especially the quantum one (see here for example). While these types of work are currently ‘hot’, I decided to do a small post here about the small cousin of ML, which is automation. That is: Extracting information from large datasets of experiments.

This came about from my recently published work done at Grenoble, in which I had the chance to work with a large number of well-organized experiments. And I think it goes nicely with my previous post which is about automation in materials simulation.

Here, instead, I will present some common methods of extracting pinch-off voltages using Python. I did a previous post on a similar subject. Together they can be quite handy for extracting information fast from 1D data. Of course, they can be generalized for 2D also, but the here we focus on device measurements and not spectroscopy. In fact, for the 2D plots I analysed, I handled them as a list of 1D data, so I applied immediately similar routines, instead of 2D ones.

Continue reading

The Finite Elements Method convergence survival guide

Ok, people, let’s face it. Many of us had no idea about the maths behind Finite Elements Method (FEM) simulations when we initially started using them. And most of us have felt that horrible feeling when we repeatedly saw the message ‘No convergence’ instead of a nice output. What is horrible about it is that, unless you or your group develops the software, you probably have no idea where to start looking for fixing the problem.

I heard from a lot of people in my field (electronics) that they have felt discouraged with FEM and did not even want to touch it. But I’m here to tell you that there is hope! I decided to write this guide after almost 10 years of using this type of software (on and off), first for nanoelectonics and then for semiconducting quantum technologies. It might be that the issue is actually more important in the latter, because of the differences in magnitude (or the scale of things) between classical and quantum effects (yes, not everything is quantum in quantum TCAD). But this is a user’s and not developer’s guide, so I will also keep it math-and code-free.

Continue reading

Nearest neighbour hoppings in TBModels for kwant

TBModels is a python module that belongs to the Z2Pack toolkit, and can be used to constructuct Tight Binding models to be used with Kwant software for transport calculations using the Landauer-Buttinker formula.

When deriving Hamiltonian matrices from first principles with Wannier90 for kwant, TBmodels will restore all the hoppings between adjacent unit cells. This can be proven very time-consuming both when preparing and solving systems with lots of atoms. Often, only nearest neighbor (nn) interactions are needed, especially if next-nearest neighbor (nnn) etc. decay considerably that can be safely ignored.

For example, in my system, WFs 4 and 2 are neighbors. When looking at the Wannier_hr.dat file, I see the following:

0 0 0 4 2 -1.287933 0.000000


0 1 0 4 2 0.056218 0.000000


0 2 0 4 2 0.004991 -0.000000


0 3 0 4 2 0.008744 -0.000000


0 4 0 4 2 -0.004063 -0.000000

The first three numbers signify the unit cell, which is [0,0,0] in the home, [0,1,0] one hop in the y direction, [0,2,0] two hops in the y direction etc. The next numbers are the WFs (namely 4 and 2) and the last term is the hopping term. In my system, there is no repetition in the z direction, and so only x and y are important. z stays 0.

Continue reading

Process tricks for FinFETs in TCAD

Following up on how to make life easier with TCAD software, I am including another post, this time about convergence in during process simulation.

One of the most difficult bits of FinFET construction in Synopsys process was the Source/Drain fine-tuning. The raised source-drain structures are used to reduce parasitic resistance. The 3D structure is shown in the following figure:


The two simulation models I was provided each had a different method of construction:

Continue reading

Change material type in Sentaurus TCAD

There are times when I wish someone showed me an easier way to do something and this is one of them: At some point I had to change the material type in my model after creating the structure in Sentaurus process. To do this I spent quite some time looking for tricks and hacks in the manuals. From this I created my little method. As it turns out there are easier ways to do it which I found from a solvnet example a few months later. Here I will show you both methods.

For both methods you need to make sure the new material you want is in the database, if not, then this creates it in Sentaurus process:

mater add name= alt.matername=

Furthermore, it needs to be added in the datexcodes.txt file and its properties defined in the parameter file sdevice.par.

Continue reading