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

My experience with aiida

Me and aiida go way back, but sadly, I never got the opportunity to use it extensively until now. Lately, as I got more exposure, I feel the same as the first time I started experimenting with it: Lost!

I decided to do this post, not to do criticism – if anything, I am the last person to do it, as I have one or two repos that I need to find the time to finish documenting. I just like the idea and its purpose and would like to talk about it as a user, so that you don’t feel alone. Since it’s changing versions fast, it’s quite possible the issues I point out here will be solved soon.

If someone doesn’t know of what aiida is, it is an automation software than lets you run multiple simulations, read the outputs, adjust, re-run and basically it is like a little robot that does a lot of the boring work for you, while it’s fairly updated on new methods and algorithms (check this example).

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

3D and 2D reciprocal lattice vectors (Python example)

When I started using Density Functional Theory and, even more, when trying to re-create its results in a meaningful piece of material, like a nanoribbon or a nanowire, a lot of the problems came during geometry creation. This is natural, as DFT is a theory to derive quantities like eigenenergies, in a crystal lattice with periodicity. But when trying to switch to a model that is finite in one or more directions, you have to start a sort of mix and match procedure.

During this time (and assuming you are not the one who writes the software), visualizing vectors is maybe the less useful thing to do. Still, there are cases where you need it in order to get a better understanding of things, like visualizing Weyl points.

Continue reading

Matrix elements of the momentum operator in Quantum Espresso

Last week I was trying to find what the format of the filp file is for Quantum Espresso that produced by bands.x with the appropriate variable set, and which contains the matrix elements of the momentum operator between valence and conduction bands.

As I couldn’t find any documentation on is format, or any .gnu files to plot it, I thought it would be faster for me to go through the code, and indeed it was quite easy to figure out what was being printed, so I thought I would post this here too.

I will also upload a python notebook that converts them into .csv file, as soon as I double check that it is working properly. 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

List of simulators

It is with excitement that I update this almost four-years-old post now. After so many years of working in computational electronics, I have finally seen all the things that I was expecting to be realised, and I expect even more to come mainly related to accelerated materials discovery and big databases.

I provide here, a list of the software (mostly open source) that I use to find all the intriguing things that a life of a scientist has. This list is mainly about electronic devices (solid state physics) from first principles, but that is not the only field where DFT has expanded it roots. There are plenty of chemistry software out there that have recently expanded their capabilities beyond anything we’ve seen in the past.

Electronic structure calculations:

First principles electronic strcutre and/or transport and other phenomena:

Continue reading

Transport and trapping in oxides using Sentaurus TCAD

Charge transport and trapping in the oxides interests many people, when it comes to device engineering, for different reasons. One of them is the variety of device configurations that can exist using thin film oxides.

During my PhD, I worked a lot with simulating such trapping mehanisms using the TCAD software Synopsys Sentaurus. Of course, the main issue with this kind of work was whether it was producing meaningful results. While this can be tested only using experimental output, in order to comare the results of the simulator with the theory, I was using some Mathematica scripts that I am attaching at the end of this post.

This model, is what Sentaurus uses to model transport and trapping in the oxide, and while many calculations can be double checked with the script, some others are impossible, as to derive them solely from the bias applied to the device, would require extensive analytical modelling. Such thing, of course, would be hard if the device is three-dimensional, unless you are willing to write your own code that solves the Drift-Diffusion (DD) equation using the Finite Elements Method.

Instead, I chose to trust the solution of the DD coming from the software, and only test the equations of charge trapping using the values of current and electron density from specific points in the oxide. This was both for current and diffusion enabled trapping, as well as the state transition functionality for the creation of new traps in the oxides (as for example after stress is applied).

DDTrapping calculates the occupational probability and the trapped harge density given constants as  well as model parameters from the simulator, taken at a specific location in the device.

StateTransitions similarly calculates the probability of the defect being in a specific state as well as the state transition rates.

Relative distances between high-symmetry points in the Brillouin Zone

One common situation when calculating the band structure of a material using Density Functional Theory (DFT) is deriving the relative distances between points in the Brillouin Zone (BZ). The DFT tool will use the number of points defined for each direction in the BZ to produce the eigenvalues.  Abinit calls this “circuit”, and luckily, can be set to calculate it automatically by defining the length (or points) of the smallest distance using the command “ndivsm”. This will produce something like the following in the output:

0.00000 0.00000 0.00000 ==> 0.33333 0.33333 0.00000 ( ndiv : 16 )
0.33333 0.33333 0.00000 ==> 0.50000 0.00000 0.00000 ( ndiv : 8 )
0.50000 0.00000 0.00000 ==> 0.00000 0.00000 0.00000 ( ndiv : 14 )

which is for the distance between four points, where the last is the same as the first (Γ->Κ->Μ->Γ).

Alternatively,  since I use Quantum Epsresso, and it requires to set the distances between points yourself, I use the ones that Wannier90 calculates, so that I can make a direct comparison between the two band structures.

Continue reading