# 2. Release Notes¶

## 2.1. Introduction¶

DEVSIM download and installation instructions are located in Installation. The following sections list bug fixes and enhancements over time. Contact information is listed in Contact.

## 2.2. Release 1.6.0¶

### 2.2.1. Array Type Input and Output¶

In most circumstances, the software now returns numerical data using the Python array class. This is more efficient than using standard lists, as it encapsulates a contiguous block of memory. More information about this class can be found at https://docs.python.org/3/library/array.html. The representation can be easily converted to lists and numpy arrays for efficient manipulation.

When accepting user input involving lists of homogenous data, such as devsim.set_node_values() the user may enter data using either a list, string of bytes, or the array class. It may also be used to input numpy arrays or any other class with a tobytes method.

### 2.2.2. Get Matrix and RHS for External Use¶

The devsim.get_matrix_and_rhs() command has been added to assemble the static and dynamic matrices, as well as their right hand sides, based on the current state of the device being simulated. The format option is used to specify the sparse matrix format, which may be either in the compressed column or compressed row formats, csc or csr.

### 2.2.3. Maximum Divergence Count¶

If the Newton iteration errors keep increasing for 20 iterations in a row, then the simulator stops. This limit was previously 5. This gives a chance for a solution to be found, when there is a poor initial guess.

### 2.2.4. Mesh Visualization Element Orientation¶

Elements written to the tecplot format in 2d and 3d have node orderings compatible with the element connectivity in visualization formats. Specifying the reorder=True option in get_element_node_list() will result in node ordering compatible with meshing and visualization software.

### 2.2.5. Figure annotation¶

Fig. 4.2 has been updated, showing the EdgeNodeVolume.

### 2.2.6. Citation¶

The Citing this Work section has been added with information on how to cite the manual and the simulator.

The license terms have been changed in Documentation License so that derivative works are allowed.

### 2.2.8. Online Forum¶

The online forum for discussion about the software has moved to https://forum.devsim.org. This has been updated in Contact.

## 2.3. Release 1.5.1¶

### 2.3.1. Installation Script¶

A new installation script is in the base directory of the package. It provides instructions of completing the installation to the python environment without having to set the PYTHONPATH environment variable. It notifies the user of missing components to finish the installation within an Anaconda or Miniconda environment.

To use the script, use the following command inside of the devsim directory.

python install.py


The install script will write a file named lib/setup.py, which can be used to complete the installation using pip. The script provides instructions for the installation and deinstallation of devsim.

INFO: Writing setup.py
INFO:
INFO: Please type the following command to install devsim:
INFO: pip install -e lib
INFO:
INFO: To remove the file, type:
INFO: pip uninstall devsim


### 2.3.2. Math Functions Table¶

The list of available math functions, Table 10.2, has been reformatted, and parts have been split into the tables referenced in the next few sections.

### 2.3.3. Error Functions¶

The following inverse functions and their derivatives are now available in the model interpreter, and also listed in Table 10.3.

• erf_inv Inverse Error Function

• erfc_inv Inverse Complimentary Error Function

• derf_invdx Derivative of Inverse Error Function

• derfc_invdx Derivative of Complimentary Inverse Error Function

### 2.3.4. Fermi Integral¶

The Joyce-Dixon approximation [JD77] for the Fermi integral and its inverse are now calculated with extended floating point precision, when extended precision is enabled. These functions are now listed in Table 10.4.

• Fermi Fermi integral

• dFermidx Derivative of Fermi integral

• InvFermi Inverse Fermi integral

• dInvFermidx Derivative of inverse Fermi Integral

The following examples are available:

• testing/Fermi1.py Fermi integral

• testing/Fermi1_float128.py Fermi integral in extended floating point precision

### 2.3.5. Gauss-Fermi Integral¶

The Gauss-Fermi Integral, using Paasch’s equations [PS10] are now available, and are listed in Table 10.5..

• gfi Gauss-Fermi Integral

• dgfidx Derivative of Gauss-Fermi Integral

• igfi Inverse Gauss-Fermi Integral

• digfidx Derivative of Inverse Gauss-Fermi Integral

Each of these functions take two arguments, zeta and s. The derivatives with respect to the first argument are provided.

The following examples are available:

• testing/GaussFermi.py Gauss-Fermi integral

• testing/GaussFermi.py Gauss-Fermi integral with extended floating point precision

## 2.4. Release 1.5.0¶

The devsim.custom_equation() command has been modified to require a third return value. This boolean value denotes whether the matrix entries should be row permutated or not. For the bulk equations this value should be True. For interface and contact boundary conditions, this value should be False. More information is available in Custom Matrix assembly.

It is now possible to replace an existing custom_equation.

The file examples/diode/diode_1d_custom.py demonstrates custom matrix assembly and can be directly compared to examples/diode/diode_1d.py.

The EdgeNodeVolume model is now available for the volume contained by an edge and is referenced in Edge models.

The devsim.equation() command has removed support for the volume_model option. It has been replaced with:

• volume_node0_model

• volume_node1_model

This makes it possible to better integrate nodal quantities on the volumes of element edges. For example, a field dependent generation-recombination rate can be volume integrated separately for each node of an element edge.

The devsim.contact_equation() now supports the following options:

• edge_volume_model

• volume_node0_model

• volume_node1_model

This makes it possible to integrate edge and element edge quantities with respect to the volume on nodes of the edge at the contact. This is similar to devsim.equation(), described in June 7, 2015.

The integration parameters for edge_volume_model are set with

• edge_node0_volume_model (default EdgeNodeVolume Edge models )

• edge_node1_volume_model (default EdgeNodeVolume)

and for volume_model with:

These parameters are applicable to both devsim.equation() devsim.contact_equation().

## 2.5. Release 1.4.14¶

### 2.5.1. Platforms¶

Windows 32 bit is no longer supported. Binary releases of the Visual Studio 2019 MSYS2/Mingw-w64 64-bit builds are still available online for Microsoft Windows 10.

On Linux, the releases are now on Centos 7, as Centos 6 has reached its end of life on November 30, 2020.

For future development, C++17 is now the recommended C++ compiler standard.

## 2.6. Release 1.4.13¶

The node indexes with the maximum error for each equation will be printed when debug_level is verbose.

devsim.set_parameter(name="debug_level", value="verbose")


These are printed as RelErrorNode and AbsErrorNode:

Region: "gate"      RelError: 5.21531e-14   AbsError: 4.91520e+04
Equation: "ElectronContinuityEquation"    RelError: 4.91520e-16   AbsError: 4.91520e+04
RelErrorNode: 129       AbsErrorNode: 129


This information is also returned when using the info=True option on the devsim.solve() command for each equation on each region of a device.

If the info flag is set to True on the solve command, the iteration information will be returned, and an exception for convergence will no longer be thrown. It is the responsibility of the caller to test the result of the solve command to see if the simulation converged. Other types of exceptions, such as floating point errors, will still result in a Python exception that needs to be caught.

## 2.7. Release 1.4.12¶

Element assembly for calculation of current and charges from the device into the circuit equation are fixed. These tests are added:

• testing/cap_2d_edge.py

• testing/cap_2d_element.py

• testing/cap_3d_edge.py

• testing/cap_3d_element.py

The edge variant is using standard edge based assembly, and the element variant is using element-based assembly.

## 2.8. Release 1.4.11¶

The devsim.element_pair_from_edge_model() command is available to calculate element edge components averaged onto each node of the element edge. This makes it possible to create an edge weighting scheme different from those used in devsim.element_from_edge_model(). The examples examples/diode/laux2d.py (2D) and examples/diode/laux3d.py (3D) compare the built-in implementations of these commands with equivalent implementations written in Python

Fixed issue where command option names where not always shown in the documentation.

The platform specific notes now clarify that any version of Python 3 (3.6 or higher) is supported.

• linux.txt

• windows.txt

• macos.txt

## 2.9. Release 1.4.10¶

Fixed crash when evaluating element edge model in 3D.

Fixed potential error using devsim.delete_node_model() and similar deletion commands.

## 2.11. Release 1.4.8¶

In transient mode, the convergence test was flawed so that the charge_error was the only convergence check required for convergence. The software now ensures all convergence criteria are met.

## 2.12. Release 1.4.7¶

### 2.12.1. Models¶

In the simple physics models, the sign for time-derivative terms was wrong for the electron and hole continuity equations. This affects small-signal and noise simulations. The example at examples/diode/ssac_diode.py was updated to reflect the change.

### 2.12.2. Platforms¶

Fix build script issue for Apple macOS on Travis CI, updated the compiler to g++-9.

Update Centos 6 build from devtoolset-6 to devtoolset-8.

## 2.13. Release 1.4.6¶

### 2.13.1. Version Information¶

Parameter info can be queried for getting version information. The file testing/info.py contains an example.

python info.py


### 2.13.2. Extended Precision¶

The example examples/diode/gmsh_diode3d_float128.py provides an example where extended precision is enabled.

### 2.13.3. Python Formatting¶

The Python scripts in the examples and testing directories have been reformatted to be more consistent with language standards.

### 2.13.4. Platforms¶

Microsoft Windows 10 is supported and is now compiled using Microsoft Visual Studio 2019.

Microsoft Windows 7 is no longer supported, as Microsoft has dropped support as of January 14, 2020.

### 2.13.5. External Meshing¶

Support for reading meshes from Genius Device Simulator has been completely removed from DEVSIM.

## 2.14. Release 1.4.5¶

An MSYS2/Mingw-w64 build is available for 64-bit Microsoft Windows. This build, labeled devsim_msys_v1.4.5, enables the use of the 128-bit floating point precision already available on the Apple macOS and Linux platforms.

## 2.15. Release 1.4.4¶

### 2.15.1. Bug Fixes¶

An intermittent crash on Microsoft Windows 10 was occuring at the end of the program. It is now fixed.

### 2.15.2. Documentation¶

A file named CHANGES.md is now distributed with DEVSIM, detailing changes to the program.

### 2.15.3. Internal changes¶

• Regression system script refactored to Python

• Refactored threading code using C++11 function

• Refactored timing functions for verbose mode using C++11 functions

• Refactored FPE detection code to C++11 standard

## 2.16. Release 1.4.3¶

Fix failures with the following commands:

## 2.17. Release 1.4.2¶

In this release there are the following improvements.

• Errors due to floating point exceptions and failed matrix factorization are not fatal.

• The Apple macOS release fixes runtime issues with macOS 10.13 (High Sierra).

• The provided binary releases utilize more libraries from Anaconda.

## 2.18. Release 1.4.1¶

### 2.18.1. Math Functions¶

The cosh, sinh, tanh, are now available math functions. Please see Table 10.2. In addition, all of the functions in the table, except for Fermi and inverse Fermi functions, are evaluate in extended precision mode. This mode may be enabled using the parameters discussed in Extended Precision.

### 2.18.2. Element Model Memory Leak¶

A large memory leak was occurring during the evaluation of element edge models created with devsim.element_from_edge_model(). It is now fixed and memory usage is now stable when these models are evaluated.

### 2.18.3. Python 3 API Memory Leak¶

A small memory leak could occur when devsim functions where called, or when data was returned. These reference counting issues are now fixed.

## 2.19. Release 1.4.0¶

The devsim.custom_equation() and devsim.register_function() commands take Python functions, instead of the a string with the function name.

The following commands are available to store data on edges and element edges:

## 2.20. Release 1.3.0¶

### 2.20.1. Python 3 Examples¶

All of the Tcl regression tests in the testing directory have been converted to Python 3. These tests serve as examples for features that were previously only tested using Tcl scripting.

### 2.20.2. Tcl Support Deprecated¶

Tcl support is deprecated and will be removed in a future release of the software.

### 2.20.3. Binary Releases¶

#### 2.20.3.1. Scripting Languages¶

Python 3 is now the only scripting language in the releases available from:

https://github.com/devsim/devsim/releases

#### 2.20.3.2. Math Library¶

The Microsoft Windows version now uses Intel MKL Pardiso for direct matrix factorization. Both Linux and Apple macOS have been using Intel MKL Pardiso since November 1, 2015. Binary releases for all operating systems use BLAS/LAPACK routines from Intel Math Kernel Library.

## 2.21. Release 1.2.0¶

DEVSIM releases have better support for Python 3. Using the stable ABI, the software is able to run newer Python 3 releases, without rebuilding the software.

Support for Python 2.7 has been removed.

The banner has been removed when the DEVSIM module is imported.

The symdiff python module is now part of the DEVSIM release. This module has additional features not available using the devsim.symdiff() command from DEVSIM. By first setting the PYTHONPATH variable to the lib directory in the DEVSIM distribution, symdiff is loaded by using

import symdiff


Documentation is available in the doc directory of this distribution. Examples are available in the examples/symdiff directory.

## 2.22. Release 1.1.0¶

The Bernoulli function, $$B(x)$$,

$B \left( x \right) = \frac{x}{\mathrm{e}^x - 1}$

and its derivative,

$dBdx \left( x \right) = \frac{\mathrm{e}^x - 1 - x \mathrm{e}^x}{\left(\mathrm{e}^x - 1\right)^2}$

have been refactored. They are used to calculate electron and hole current densities using the Scharfetter-Gummel method [SG69].

The Bernoulli function has numerical issues when $$x$$ approaches 0 and requires special evaluation. In this release, DEVSIM, takes advantage of C++11 math library functions for evaluating the denominator.

In addition, these functions are evaluated with extended precision, when this mode is enabled in the simulator. This mode is described in Extended Precision and controlling parameters are in Parameters controlling program behavior..

Users should expect that simulation results should change in the number of solver iterations and small differences in simulation results. This and other functions are listed in Predefined Functions.

## 2.23. Release 1.0.0¶

### 2.23.1. Documentation¶

The formatting of the PDF and online documentation has been improved. Also significant changes have been made to the way DEVSIM is called from Python.

### 2.23.2. Version¶

Due to the numerous changes in the Python API, the version number has been updated to having a major revision of 1. We adopt the semantic version numbering presented at https://semver.org. The version number can be accessed through the Python interface using the devsim.__version__ variable.

### 2.23.3. Operating Systems¶

The Microsoft Windows 32-bit operating system is now supported in addition to the platforms listed in Supported platforms.

### 2.23.4. Python Support¶

DEVSIM is now loaded as a shared library from any compatible Python interpreter. Previously, DEVSIM binaries contained an embedded Python interpreter. The following versions of Python are supported in this release

• 2.7

• 3.6

• 3.7

By first setting the PYTHONPATH variable to the lib directory in the DEVSIM distribution, devsim is loaded by using

import devsim


from Python. Previous releases of devsim used the ds module, the manual will be updated to reflect the change in module name.

Many of the examples in the distribution rely on the python_packages module, which is available by using:

import devsim.python_packages


The default version of Python for use in scripts is Python 3.7. Scripts written for earlier versions of Python 3 should work. Python 2.7 is deprecated for future development.

Anaconda Python 3.7 is the recommended distribution and is available from https://continuum.io. The Intel Math Kernel Library is required for the official DEVSIM releases. These may be installed in Anaconda using the following command:

conda install mkl


On the Microsoft Windows platform, the following packages should also be installed:

conda install sqlite zlib


Some of the examples and tests also use numpy, which is available using:

conda install numpy


### 2.23.5. GMSH Support¶

Gmsh has announced a new version of their mesh format 4.0. DEVSIM currently supports the previous version, 2.2. To load a file from Gmsh, it is now necessary to either:

A future release of DEVSIM will provide this capability.

### 2.23.6. CGNS Support¶

Support for loading CGNS files is deprecated, and is no longer part of the official releases. Please see Using an external mesher for more information about importing meshes from other tools.

## 2.24. July 20, 2018¶

### 2.24.2. Python 3 Support¶

Python 3 executable, devsim_py3 is now supplied in addition to standard Python 2 executable, devsim.

### 2.24.3. Element Information¶

The devsim.get_element_node_list() retrieves a list of nodes for every element on a region, contact, or interface.

### 2.24.4. Interface Boundary Condition¶

The type=hybrid option is now available for the devsim.interface_equation() command. Please see Interface equation assembly for information about boundary conditions.

### 2.24.5. Interace Equation Coupling¶

The name0, and name1 options are now available for the devsim.interface_equation() command. They make it possible to couple dissimilar equation names across regions.

### 2.24.6. Interface and Contact Surface Area¶

Contact surface area is no longer included in SurfaceArea node model. It is now placed in ContactSurfaceArea. These are listed in Table 4.1.

### 2.24.8. Extended Precision¶

The following new parameters are available:

• extended_solver, extended precision matrix for Newton and linear solver

• extended_model, extended precision model evaluation

• extended_equation, extended precision equation assembly

When compiled with 128-bit extended precision support, these options enable calculations to be performed with higher precision. Default geometric models, are also calculated with extended precision.

devsim.set_parameter(name = "extended_solver", value=True)
devsim.set_parameter(name = "extended_model", value=True)
devsim.set_parameter(name = "extended_equation", value=True)


Currently, the Linux and gcc-based Apple macOS versions have extended precision support.

## 2.25. May 15, 2017¶

### 2.25.1. Platforms¶

• The Ubuntu 16.04 (LTS) platform is now supported.

• The Ubuntu 12.04 (LTS), Centos 5 (Red Hat 5 compatible) platforms are no longer supported. These platforms are no longer supported by their vendors.

• Apple macOS compiled with flat_namespace to allow substitution of dynamically linked libraries.

• Microsoft Windows 7 is compiled using Microsoft Visual Studio 2017.

### 2.25.2. Binary Releases¶

• Releases available from https://github.com/devsim/devsim/releases.

• Centos 6 released is linked against the Intel Math Kernel Library.

• Microsoft Windows 7 release is linked against the Intel Math Kernel Library

• Apple macOS can optionally use the Intel Math Kernel Library.

• Anaconda Python 2.7 is the recommended distribution.

### 2.25.3. Bug Fixes¶

• 3D element edge derivatives were not being evaluated correctly

• 3D equation model evaluation for element edge models

### 2.25.4. Enhancements¶

• Build scripts are provided to build on various platforms.

• DEVSIM mesh format stores elements, instead of just nodes, for contact and interfaces

• The devsim.create_gmsh_mesh() command can be used to create a device from a provided list of elements.

## 2.26. February 6, 2016¶

DEVSIM is now covered by the Apache License, Version 2.0 . Please see the NOTICE and LICENSE file for more information.

## 2.27. November 24, 2015¶

### 2.27.1. Python Help¶

The Python interpreter now has documentation for each command, derived from the documentation in the manual. For example, help for the devsim.solve() can be found using:

help("devsim.solve")


The manual has been updated so that commands are easier to find in the index. Every command now has a short description. Cross references have been fixed. The date has been added to the front page.

## 2.28. November 1, 2015¶

### 2.28.1. Convergence Info¶

The devsim.solve() now supports the info option. The solve command will then return convergence information.

### 2.28.2. Python Interpreter Changes¶

The way DEVSIM commands are loaded into the devsim module has been changed. It is now possible to see the full list of DEVSIM commands by typing

help('devsim')


in the Python interpreter.

### 2.28.3. Platform Improvements and Binary Availability¶

Many improvements have been made in the way binaries are generated for the Linux, Apple macOS, and Microsoft Windows platforms.

For Linux (see linux.txt):

• Create Centos 5, (Red Hat Enterprise Linux 5 compatible) build

• Build uses Intel Math Kernel Library math libraries (community edition)

• Build uses any compatible Python 2.7, including Anaconda

• Build compatible with newer Linux distributions.

For Apple macOS (see macos.txt):

• Uses the system Python 2.7 on macOS 10.10 (Yosemite)

• Provide instructions to use Anaconda Python

For Microsoft Windows (see windows.txt):

• Uses any compatible Python 2.7, including Anaconda

• Build uses Intel Math Kernel Library Community Edition

Binary releases are available for these platforms at https://devsim.org.

## 2.29. September 6, 2015¶

The devsim.set_node_values() takes a new option, values. It is a list containing values to set for all of the nodes in a region.

The following new commands have been added:

## 2.30. August 10, 2015¶

The devsim.create_contact_from_interface() may be used to create a contact at the location of an interface. This is useful when contact boundary conditions are needed for a region connected to the interface.

## 2.31. July 16, 2015¶

The devsim.set_node_value() was not properly setting the value. This issue is now resolved.

## 2.32. June 7, 2015¶

The devsim.equation() now suppports the edge_volume_model. This makes it possible to integrate edge quantities properly so that it is integrated with respect to the volume on nodes of the edge. To set the node volumes for integration, it is necessary to define a model for the node volumes on both nodes of the edge. For example:

devsim.edge_model(device="device", region="region", name="EdgeNodeVolume",
equation="0.5*EdgeCouple*EdgeLength")
set_parameter(name="edge_node0_volume_model", value="EdgeNodeVolume")
set_parameter(name="edge_node1_volume_model", value="EdgeNodeVolume")


For the cylindrical coordinate system in 2D, please see Cylindrical Coordinate Systems.

macOS 10.10 (Yosemite) is now supported. Regression results in the source distribution are for a 2014 Macbook Pro i7 running this operating system.

## 2.33. October 4, 2014¶

### 2.33.1. Platform Availability¶

The software is now supported on the Microsoft Windows. Please see Supported platforms for more information.

## 2.34. December 25, 2013¶

### 2.34.1. Binary Availability¶

Binary versions of the DEVSIM software are available for download from http://sourceforge.net/projects/devsim. Current versions available are for

• macOS 10.10 (Yosemite)

• Red Hat Enterprise Linux 6

• Ubuntu 12.04 (LTS)

### 2.34.2. Platforms¶

macOS 10.10 (Yosemite) is now supported. Support for 32 bit is no longer supported on this platform, since the operating system is only released as 64 bit.

Regression data will no longer be maintained in the source code repository for 32 bit versions of Ubuntu 12.04 (LTS) and Red Hat Enterprise Linux 6. Building and running on these platforms will still be supported.

### 2.34.3. Source code improvements¶

The source code has been improved to compile on macOS 10.10 (Yosemite) and to comply with C++11 language standards. Some of the structure of the project has been reorganized. These changes to the infrastructure will help to keep the program maintainable and useable into the future.

## 2.35. September 8, 2013¶

### 2.35.1. Convergence¶

If the simulation is diverging for 5 or more iterations, the simulation stops.

### 2.35.2. Bernoulli Function Derivative Evaluation¶

The dBdx math function has been improved to reduce overflow.

### 2.35.3. Default Edge Model¶

The edge_index is now a default edge models created on a region Table 4.2.

## 2.36. August 14, 2013¶

### 2.36.1. SYMDIFF functions¶

The vec_max and vec_min functions have been added to the SYMDIFF parser (Table 10.2). The vec_sum function replaces sum.

### 2.36.2. Default Node Models¶

The coordinate_index and node_index are now part of the default node models created on a region (Table 4.1}).

### 2.36.3. Set Node Value¶

It is now possible to use the devsim.set_node_value() to set a uniform value or indexed value on a node model.

### 2.36.4. Fix Edge Average Model¶

Fixed issue with devsim.edge_average_model() during serialization to the DEVSIM format.

## 2.37. July 29, 2013¶

### 2.37.1. DEVSIM is open source¶

DEVSIM is now an open source project and is available from https://github.com/devsim/devsim. License information may be found in DEVSIM License. If you would like to participate in this project or need support, please contact us using the information in Contact. Installation instructions may be found in Installation.

### 2.37.2. Build¶

The Tcl interpreter version of DEVSIM is now called devsim_tcl, and is located in /src/main/ of the build directory. Please see the INSTALL file for more information.

### 2.37.3. Contact Material¶

Contacts now require a material setting (e.g. metal). This is for informational purposes. Contact models still look up parameter values based on the region they are located.

### 2.37.4. External Meshing¶

Genius Mesh Import DEVSIM can now read meshes written from Genius Device Simulator. Support is no longer available in recent versions releases.
Gmsh Mesh Import DEVSIM reads version 2.1 and 2.2 meshes from Gmsh. Version 2.0 is no longer supported. Please see Gmsh for more information.
The acosh, asinh, atanh, are now available math functions. Please see Table 10.2.