DEVSIM is semiconductor device simulation software which uses the finite volume method. It solves partial differential equations on a mesh. The Python interface allows users to specify their own equations.

Software Features

  • Documentation

  • Python and Tcl scripting

  • DC, small-signal AC, impedance field method, transient

  • User specified partial differential equations (PDE).

  • 1D, 2D, and 3D simulation

  • 1D, 2D mesher

  • Import 3D meshes.

  • 2D cylindrical coordinate simulation

  • ASCII file format with PDE embedded.

Please see INSTALL file for installation instructions from source. Please see NOTICE and LICENSE files for copyright and license information.

Supported Platforms

  • macOS 10.13

  • Microsoft Windows

  • Red Hat 6 (Centos Compatible)


The source code and accompanying examples are provided by Devsim LLC. It is licensed under the Apache 2.0 License. A brief synopsis of this license is available here. Other files are subject to the license terms of their copyright owners.

DEVSIM is a registered trademark of DEVSIM LLC.


In addition to the examples provided with the distribution, and listed in the documentation. The following examples are also available:



PDF Version

Online HTML Version


  • Semiconductor Device Simulation Using DEVSIM

    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

  • Symbolic Model Evaluation for TCAD Device Simulation

    Symbolic model evaluation is a powerful method for developing models for technology computer-aided design (TCAD) device simulation. It gives users the ability to accurately describe physical phenomena. Coupled with automatic creation of derivative expressions, new models can be rapidly developed with performance rivaling source code approaches. A new device simulation tool is presented with a drift-diffusion example.

  • TCAD Sensitivity Analysis for Device Optimization

    We explore the use of sensitivity analysis for technology computer-aided design (TCAD) optimization. By directly coupling device response to model parameters, our approach may be used to generate derivatives for gradient-based optimization. An example is presented for inverse modeling of a doping profile. We compare the number of simulations required, and accuracy, to a design of experiments (DOE) based optimization.





TCAD Resources

Model Example

Solving the Poisson equation in a dielectric is:

\(\epsilon \int \nabla \psi \cdot \partial r = 0\)

which is equivalent to solving

\(\epsilon \int \vec{E} \cdot \partial \vec{s} = 0\)

In DEVSIM, the surface integral is performed by specifying an equation in the region with an edge model which is the negative gradient of the potential, \(\psi\). An example implementation is located in 1

def CreateOxidePotentialOnly(device, region, update_type="default"):
    Create electric field model in oxide
    Creates Potential solution variable if not available
  if not InNodeModelList(device, region, "Potential"):
    print "Creating Node Solution Potential"
    CreateSolution(device, region, "Potential")

  efield="(Potential@n0 - Potential@n1)*EdgeInverseLength"
  # this needs to remove derivatives w.r.t. independents
  CreateEdgeModel(device, region, "ElectricField", efield)
  CreateEdgeModelDerivatives(device, region, "ElectricField", efield, "Potential")
  CreateEdgeModel(device, region, "PotentialEdgeFlux", dfield)
  CreateEdgeModelDerivatives(device, region, "PotentialEdgeFlux", dfield, "Potential")
  equation(device=device, region=region, name="PotentialEquation", variable_name="Potential",
      edge_model="PotentialEdgeFlux", variable_update=update_type)