Category Archives: DEVSIM

DEVSIM 1.0.0 Release

New release of the DEVSIM® Semiconductor Device Simulator

December 18, 2018: DEVSIM LLC announces the release of version 1.0 of the DEVSIM® TCAD Semiconductor Device Simulator. Open source since 2013, DEVSIM® uses finite volume methods to solve for the electrical behavior of semiconductor devices on a mesh. In addition to the standard drift-diffusion equations, the density-gradient method can be used to account for quantum effects near semiconductor insulator boundaries. This approach is suitable for:

  • Simulating Advanced Semiconductor Devices
  • Capacitance Extraction
  • Generalized PDE Simulation

In this release, the software has been extended to support easier integration into existing Python installations on macOS, Microsoft Windows, and Linux operating systems. In addition, the version numbering system has been adapted to reflect major and minor changes to the software.

DEVSIM® is available from The site include more information for those who wish to use or participate in development of this software.


DEVSIM LLC was founded in 2008 to provide TCAD simulation software and programming services. For more information, please visit

DEVSIM® is a registered trademark of DEVSIM LLC. All product names, trademarks and registered trademarks are property of their respective owners.

Density Gradient Method

The Density Gradient Method has been implemented as a simulation example for DEVSIM. This method is a quantum mechanical correction for carrier densities near a semiconductor/insulator interface.

The example scripts simulate both a 1D and 2D MOSCAP structure. The scripts generate plots to visualize the results.

It can be downloaded from

Semiconductor Device Simulation Using DEVSIM

Semiconductor Device Simulation Using DEVSIM is now available from our site.

DEVSIM is a technology computer aided design (TCAD) simulation software. It is released under an open source license. The software solves user defined partial differential equations (PDEs) on 1D, 2D, and 3D meshes. It is implemented in C++ using custom code and a collection of open source libraries. The Python scripting interface enables users to setup and control their simulations.

In this chapter, we present an overview of the tool. This is followed with a bipolar junction transistor (BJT) design and characterization example. A collection of open source tools were used to create a simulation mesh, and visualize results

The Python scripts for simulation are here:

DEVSIM under new open source license

The DEVSIM source code is now released under the Apache License, Version 2.0. It was previously under the LGPL 3.0. The license change is intended to promote adoption of the software and attract new contributors. A brief synopsis of the license is here.

The spirit of the Apache License is also more in line with the license terms packages that DEVSIM relies upon. More information about DEVSIM is available from

DEVSIM is now Open Source

DEVSIM is now open source. The core engine is licensed under the LGPL 3.0 license, meaning it is available for use in your own software. The project home page is here:

The direct link to the documentation is here:

I hope that this software is useful to the TCAD simulation community. Please let me know if you have any questions about installation or usage of the software.

1D diode junction, part II

In the previous blog post, 1D diode junction I showed some simulation results, here I share some of the actual script for the physics behind this example.

For the poisson equation, the implementation is:

pne = "-ElectronCharge*kahan3(Holes, -Electrons, NetDoping)"
CreateNodeModel(device, region, "PotentialNodeCharge", pne)
CreateNodeModelDerivative(device, region, "PotentialNodeCharge", pne, "Electrons")
CreateNodeModelDerivative(device, region, "PotentialNodeCharge", pne, "Holes")

equation(device=device, region=region, name="PotentialEquation", variable_name="Potential",
node_model="PotentialNodeCharge", edge_model="PotentialEdgeFlux",
time_node_model="", variable_update="log_damp")

where “PotentialEdgeFlux” was defined elsewhere in the script as “Permittivity * ElectricField”. The “kahan3” function is provided to add 3 numbers with additional precision.

For the electron and hole current densities, the Scharfetter-Gummel method is used to calculated the current along each edge connecting the nodes in the mesh. The Bernoulli function, B(x) and its derivative, dBdx(x) are provided in the DEVSIM interpreter

vdiffstr="(Potential@n0 - Potential@n1)/V_t"
CreateEdgeModel(device, region, "vdiff", vdiffstr)
CreateEdgeModel(device, region, "vdiff:Potential@n0", "V_t^(-1)")
CreateEdgeModel(device, region, "vdiff:Potential@n1", "-vdiff:Potential@n0")
CreateEdgeModel(device, region, "Bern01", "B(vdiff)")
CreateEdgeModel(device, region, "Bern01:Potential@n0", "dBdx(vdiff) * vdiff:Potential@n0")
CreateEdgeModel(device, region, "Bern01:Potential@n1", "-Bern01:Potential@n0")
Jn = "ElectronCharge*mu_n*EdgeInverseLength*V_t*kahan3(Electrons@n1*Bern01, Electrons@n1*vdiff, -Electrons@n0*Bern01)"
CreateEdgeModel(device, region, "ElectronCurrent", Jn)
for i in ("Electrons", "Potential", "Holes"):
  CreateEdgeModelDerivatives(device, region, "ElectronCurrent", Jn, i)

In this example, the @n0, and @n1 refers to the variables on each node of the edge. For an edgemodel, “foo”, a derivative with respect to variable on the first node, “bar”, would be “foo:bar@n0”.

For the Shockley Read Hall recombination model, the implementation is:

USRH="(Electrons*Holes - n_i^2)/(taup*(Electrons + n1) + taun*(Holes + p1))"
Gn = "-ElectronCharge * USRH"
Gp = "+ElectronCharge * USRH"
CreateNodeModel(device, region, "USRH", USRH)
CreateNodeModel(device, region, "ElectronGeneration", Gn)
CreateNodeModel(device, region, "HoleGeneration", Gp)
for i in ("Electrons", "Holes"):
  CreateNodeModelDerivative(device, region, "USRH", USRH, i)
  CreateNodeModelDerivative(device, region, "ElectronGeneration", Gn, i)
  CreateNodeModelDerivative(device, region, "HoleGeneration", Gp, i)

The purpose of this post is to describe some of the physics used in the previous example, and show how they are implemented within the DEVSIM software using a scripting interface. Once a set of physical equations has been implemented, it can be placed in modules that can be reused for other simulations.

1D diode junction

It’s always nice when you can get a textbook result from your simulator.

This is the doping profile, and the resulting carrier densities for a forward bias of 0.5 V.

The potential and electric field.

The electron and hole current densities and SRH recombination.