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.
A file named CHANGES.md
is now distributed with DEVSIM
, which can contain additional details concerning a new release.
2.2. Version 2.7.0
2.2.1. Error Handling
More helpful exception information returned to Python if the error is considered fatal. This can be used to decide if the simulation can be restarted. Note that if this occurs during a solve, it is necessary for the user to restore the previous circuit and device solutions if a restart is desired. In addition, model evaluation is reset so that no false cyclic dependencies are reported after an error.
In this example code below, the previously DEVSIM FATAL
error string will now provide the context that a floating point exception occurred and be handled in Python.
try:
self.solve()
except error as msg:
m = str(msg)
if 'Convergence failure' in m:
self.set_vapp(last_bias)
elif'floating point exception' in m:
self.set_vapp(last_bias)
self.restore_callback(self.is_circuit)
else:
raise
2.3. Version 2.6.5
2.3.1. Bugs
Fixed issue [#123](https://github.com/devsim/devsim/issues/123) identified by [@gluek](https://github.com/gluek) This resulted in bad results on Windows and macOS in calculation of 3d mesh areas and volumes.
2.4. Version 2.6.4
2.4.1. SuperLU
Use MMD_ATA
preconditioner for SuperLU builds.
2.4.2. Android
Android builds use special implementations for the Bernoulli function to prevent overflow.
2.4.3. Examples
testing/pythonmesh1d.py
demonstrates how to get mesh information using devsim.get_element_node_list()
.
examples/diode/tran_diode.py
demonstrates transient diode simulation.
2.5. Version 2.6.3
Allow Python threading during long solve operations.
2.6. Version 2.6.2
delete_circuit
get_mesh_list
2.7. Version 2.6.1
2.7.1. Bugs
Fix issue [#116](https://github.com/devsim/devsim/issues/116) where the contact current was being calculated incorrectly in transient mode.
2.8. Version 2.6.0
2.8.1. Symbolic Factorization Reuse
The Intel MKL solver will now use reuse the symbolic factorization, if the simulation matrix sparse matrix pattern has not changed after the second nonlinear solver iteration. This reduces simulation time, but can result in numerical differences in the simulation result. Setting the environment variable, DEVSIM_NEW_SYMBOLIC
, will do a new symbolic factorization for each iteration.
This behavior may be controlled by using this option in the devsim.solve()
command
solve(symbolic_iteration_limit = -1)
where setting the value to -1
will create a new symbolic factorization for all nonlinear iterations. Setting the value to a number greater than 0
will mark all iterations afterwards for reusing the previous symbolic factorization.
2.8.2. Reset Simulator
The reset_devsim
command will clear all simulator data, so that a program restart is not necessary.
2.8.3. Build Infrastructure
2.8.3.1. LAPACK is Optional
When LAPACK functions are not available, it is now possible to use Eigen instead. BLAS is still required. It is up to the direct solver being used to determine necessary LAPACK functions.
2.8.3.2. Self Contained Build
The build infrastructure is being updated to support a small application build on different systems.
2.8.3.3. SuperLU Solver
For self contained builds, some commands are removed and SuperLU is the only available solver.
2.8.4. Citing DEVSIM
CITATION.md
has been updated with recent articles written about the simulator.
2.8.5. Documentation
Fix documentation issue in 1D diode where the length of the 1D diode was incorrect.
Fix issue where surface_area_model
was missing from Parameters controlling program behavior..
Added table of environment variables controlling program behavior in Environment controlling program behavior..
2.9. Version 2.5.0
UMFPACK 5.1 is the new default when the Intel MKL is not available, making this the default for the macOS arm64 platform.
SuperLU is removed and no longer available as a solver.
Regression scripts were passing when there were numerical differences in the data diff comparison. This is now corrected and the regression results have been updated on all platforms.
For those building the software, the EXPLICIT_MATH_LOAD
CMAKE option has been removed, so that the software is not directly linked to any math library.
The license text for the Apache 2.0 license has been replaced with the SPDX format of the license string. This ensures that the text can be used in a consistent manner across all source files.
2.10. Version 2.4.0
2.10.1. Determine Loaded Math Libraries
To determine the loaded math libraries, use
devsim.get_parameter(name='info')['math_libraries']
2.10.2. UMFPACK 5.1 Solver
The UMFPACK
5.1 solver is now available as a shared library distributed with the software. It is licensed under the terms of the LGPL 2.1 and our version is hosted here:
[https://github.com/devsim/umfpack_lgpl](https://github.com/devsim/umfpack_lgpl)
Please note that this version uses a scheme to provide the needed math library functions when the library is loaded.
In order to use this library, a shim script is provided to load UMFPACK and set it as the solver. Please see this example:
python -mdevsim.umfpack.umfshim ssac_cap.py
2.10.3. Direct Solver Callback
It is now possible to setup call a custom direct solver. The direct solver is called from Python and the callback is implemented by setting these parameters:
devsim.set_parameter(name="direct_solver", value="custom")
devsim.set_parameter(name="solver_callback", value=local_solver_callback)
Where the first parameter enables the use of the second parameter to set a callback function. Please see the testing/umfpack_shim.py
for a sample implementation using UMFPACK 5.1.
2.10.4. Apple M1
On this platform, the software does not check for floating point exceptions (FPEs) during usage of the direct solver. During testing, it was discovered that FPEs were occuring during factorization for both the SuperLU
and the UMFPACK
. Removing this check allows more of the tests to run through to completion.
2.10.5. Bugs
Fix issue [#104](https://github.com/devsim/devsim/issues/104) where the 2D MOSFET example was not fully connected across region interfaces.
testing/mos_2d.py
testing/mos_2d_restart.py
testing/mos_2d_restart2.py
This was resulting in an FPE during testing on macOS M1.
2.11. Version 2.3.8
2.11.1. Bugs
[@ryan3141](https://github.com/ryan3141) fixed an issue where math functions added with devsim.register_function()
were not available in extended precision model evaluation. The testing/testfunc_extended.py
test is added to validate the fix.
Update NOTICE with the license files from the various dependencies.
2.12. Version 2.3.7
2.12.1. Apple M1 Support
Intel MKL Pardiso not available, so using system BLAS/LAPACK or openblas by default. In addition, SuperLU, is used instead of the MKL Pardiso. This results in some test failures, based on the use of a different solver, and not the OS architecture.
Extended precision is enabled.
Enabled by running pip install.
The regression results are in this newly created repo:
[devsim_tests_macos_arm64](https://github.com/devsim/devsim_tests_macos_arm64)
2.12.2. Python Notebook Example With 3D Visualization
A plotting example using pyvista
is presented in examples/plotting/visualization.ipynb
. This example was provided by [@simbilod](https://github.com/simbilod).
2.12.3. Bugs
When instantiating a mesh from Gmsh, contact and interface related errors to dimensionality have an improved error message.
2.13. Version 2.3.6
On Windows the DEVSIM_MATH_LIBS
now uses the ;
as the path separator, while macOS and Linux still use :
.
The math library search order is then:
The math libraries listed in the
DEVSIM_MATH_LIBS
environment variable, with the appropriate separator.The Intel Math Kernel Library
These dynamic libraries * OpenBLAS (e.g. libopenblas.so) * LAPACK (e.g. liblapack.so) * BLAS (e.g. libblas.so)
All platforms will search for the Intel MKL by trying several version numbers. When the Intel MKL is not available, the direct solver will switch from Intel MKL Pardiso to SuperLU.
On macOS and Linux, the RPATH has been modified to look in places relative to the devsim module, instead of using CONDA_PREFIX
or VIRTUAL_ENV
.
macOS
:@loader_path;@loader_path/../lib;@loader_path/../../../../lib;@executable_path/../lib
Linux
:$ORIGIN:$ORIGIN/../lib:$ORIGIN/../../../../lib
2.14. Release 2.3.1
2.14.1. Python PIP Package
DEVSIM is now available via pip
for macOS, Linux, and Microsoft Windows. To install this package for your platform:
pip install devsim
Please see the INSTALL.md
file in the distribution for more information. These files may be found in the $CONDA_PREFIX/devsim_data
directory of your Anaconda
environment. If you are using venv
, it may be found in the $VIRTUAL_ENV/devsim_data
of your virtual environment.
2.14.2. Remove Windows MSYS Build
The msys
build is removed as an available binary package. Windows is still supported through the use of the Visual C++ compiler build.
2.14.3. Build Notes
The compiler for the Linux build are now upgraded to devtoolset-10
and is now built on manylinux2014
.
Boost is now added as a submodule, instead of using system libraries or Anaconda Python versions. The Linux build no longer requires Anaconda Python.
2.15. Release 2.2.0
2.15.1. Device and mesh deletion commands
The devsim.delete_device()
command makes it possible to delete devices so they will no longer be solved in the simulation. Any parameters set on the device are also removed from the system.
The devsim.delete_mesh()
command makes it possible to delete meshes. Once a mesh has been deleted, it is no longer possible to create devices from it using the devsim.create_device()
command.
2.15.2. Extended Precision
Extended precision is now available on Windows builds using the Visual Studio Compiler. Note that this precision is not as accurate as the float128 type used on other systems.
2.15.3. Direct Solver
SuperLU has been updated from version 4.3 to version 5.3. It is the solver used when the Intel MKL is not available.
2.15.4. Code Quality
Fixed defects found in Coverity scanning.
2.16. Release 2.1.0
2.16.1. Explicit math library loading
Since the Intel Math Kernel Library started versioning the names of their dynamic link libraries, it has been difficult to maintain a proper Anaconda Python environment when the version has been updated. With this release, it is possible to use any recent version of the Intel MKL. In addition, the user is able to load alternative BLAS/LAPACK math libraries.
2.16.1.1. Intel MKL
From DEVSIM Version 2.1.0 onward, a specific version is not required when loading the Intel MKL. If the Intel MKL is not found, the import of the devsim
module will fail, and an error message will be printed. This method is the default, and should work when using an Anaconda Python environment with the mkl
package installed.
When using a different Python distribution, or having an installation in a different place, it is possible to specify the location by modifying the LD_LIBRARY_PATH
environment variable on Linux
, or using DYLD_LIBRARY_PATH
on Apple macOS
. The explicit path may be set to the MKL math libraries may be set using the method in the next section.
2.16.1.2. Loading other math libraries
It is possible to load alternative implementations of the BLAS/LAPACK used by the software. The DEVSIM_MATH_LIBS
environment variable may be used to set a :
separated list of libraries. These names may be based on relative or absolute paths. The program will load the libraries in order, and stop when all of the necessary math symbols are supplied. If symbols for the Intel MKL are detected, then the Pardiso direct solver will be enabled.
Linux
example:
export DEVSIM_MATH_LIBS=libblas.so:liblapack.so
Apple macOS
example:
export DEVSIM_MATH_LIBS=libblas.dylib:liblapack.dylib
2.16.2. Direct solver selection
The direct solver may be selected by using the direct_solver
parameter.
devsim.set_parameter(name='direct_solver', value='mkl_pardiso')
The following options are available:
mkl_pardiso
Intel MKL Pardisosuperlu
SuperLU 4.3
The default is mkl_pardiso
when the Intel MKL is loaded. Otherwise, the default will switch to superlu
.
2.16.3. Kahan summation in extended precision mode
The kahan3
and kahan4
functions are now using the Kahan summation algorithm for extended precision model evaluation. Previously, this algorithm was replaced with 128-bit floating point addition and subtraction in releases that support extended precision mode. With this change, better than 128-bit floating precision is available when extended precision is enabled.
devsim.set_parameter(name = "extended_model", value=True)
The testing/kahan_float128.py
test has been added.
2.16.4. Visual Studio 2022
The Microsoft Windows win64
release version is now built using the Visual Studio 2022 compiler. For users needing extended precision on the Windows platform, the msys
build is recommended.
2.17. Release 2.0.1
2.17.1. Update documentation files
The following files were updated in the text documentation distributed with the software.
CONTRIBUTING.md
INSTALL.md
README.md
This was done to create a version to coincide with this paper in the Journal of Open Source Software.
Sanchez, J. E., (2022). DEVSIM: A TCAD Semiconductor Device Simulator. Journal of Open Source Software, 7(70), 3898, https://doi.org/10.21105/joss.03898.
2.17.2. Update MKL Version
The release version of this software is build against version 2 of the Intel MKL, which corresponds to the latest version of Anaconda Python.
2.18. Release 2.0.0
2.18.1. New Major Version
Based on the change in the sections Contact and Interface Equation Commands and Transient Simulation. The major version of the software has been updated to 2. Existing scripts may need to be updated for this change.
2.18.2. Contact and Interface Equation Commands
The previously deprecated variable_name
option is no longer accepted by the devsim.contact_equation()
and devsim.interface_equation()
commands. This has been updated in the documentation.
2.18.3. Documentation
2.18.3.1. Manual
Fixed unit in description for example in 1D Capacitor.
Added DOI to referenced papers and updated bibliography style in biblography.
Added reference to Equation and Models with additional information about element assembly.
Updated Equation and Models and 1D Capacitor to remove
variable_name
option fromdevsim.contact_equation()
anddevsim.interface_equation()
.
2.18.3.2. Documentation Files
Some out of date files (e.g. RELEASE, INSTALL, …) have been removed. The README.md
has been updated and the INSTALL.md
has been added.
2.18.4. Python Packages
The rampbias
function in the devsim.python_packages.ramp
module has been fixed to properly reduce the bias when there is a convergence failure.
Python
2.7 specific instructions in User Interface has been removed.
2.18.5. Solver
2.18.5.1. Transient Simulation
Fixed bug with
transient_tr
(trapezoidal) time integration method in thedevsim.solve()
command where the wrong sign was used to integrate previous time steps.Fixed bug in the charge error calculation, which calculates the simulation result with that a forward difference projection.
Added
testing/transient_rc.py
test which compares simulation with analytic result for RC circuit.Added
devsim.set_initial_condition()
to set initial transient condition as alternative to using thetransient_dc
option to thedevsim.solve()
command. Suitable options for this command may be provided from theget_matrix_and_rhs()
command.
2.18.5.2. Convergence Tests
The maximum_error
and maximum_divergence
options where added to the devsim.solve()
command. If the absolute error of any iteration goes above maximum_error
, the simulation stops with a convergence failure. The maximum_divergence
is the maximum number of iterations that the simulator error may increase before stopping.
2.18.5.3. Verbosity
During the devsim.solve()
, circuit node and circuit solution information is no longer printed to the screen for the default verbosity level. In addition, the number of equations per device and region is no longer displayed at the start of the first iteration.
2.18.5.4. Intel Math Kernel Library
The Intel Math Kernel Library now uses versioned library names. Binary releases are now updated against the latest versioned dll names from MKL available in the Anaconda Python distribution.
2.18.5.5. SuperLU
The code now supports newer versions of SuperLU
. The release version is still using SuperLU 4.3 for the iterative solution method, and the Intel MKL Pardiso for the direct solve method.
2.18.5.6. Simulation Matrix
The devsim.get_matrix_and_rhs()
command was not properly accepting the format
parameter, and was always returning the same type.
2.18.6. Add Interface supporting Periodic Boundary Conditions
The devsim.create_interface_from_nodes()
command makes it possible to create an interface with non coincident nodes. This enables the use of periodic boundary conditions.
2.18.7. Build Scripts
The build scripts have been updated on all platforms to be less dependent on specific Python 3 versions.
An updated Fedora build script has been added. It uses the system installed SuperLU
as the direct solver.
2.19. Release 1.6.0
2.19.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.19.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.19.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.19.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 devsim.get_element_node_list()
will result in node ordering compatible with meshing and visualization software.
2.19.5. Figure annotation
Fig. 4.2 has been updated, showing the EdgeNodeVolume
.
2.19.6. Citation
The Citing this Work section has been added with information on how to cite the manual and the simulator.
2.19.7. Documentation License
The license terms have been changed in Documentation License so that derivative works are allowed.
2.19.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.20. Release 1.5.1
2.20.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.20.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.20.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 Functionerfc_inv
Inverse Complimentary Error Functionderf_invdx
Derivative of Inverse Error Functionderfc_invdx
Derivative of Complimentary Inverse Error Function
2.20.4. Fermi Integral
The Joyce-Dixon approximation [4] 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 integraldFermidx
Derivative of Fermi integralInvFermi
Inverse Fermi integraldInvFermidx
Derivative of inverse Fermi Integral
The following examples are available:
testing/Fermi1.py
Fermi integraltesting/Fermi1_float128.py
Fermi integral in extended floating point precision
2.20.5. Gauss-Fermi Integral
The Gauss-Fermi Integral, using Paasch’s equations [7] are now available, and are listed in Table 10.5..
gfi
Gauss-Fermi Integraldgfidx
Derivative of Gauss-Fermi Integraligfi
Inverse Gauss-Fermi Integraldigfidx
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 integraltesting/GaussFermi.py
Gauss-Fermi integral with extended floating point precision
2.21. 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
(defaultEdgeNodeVolume
Edge models )edge_node1_volume_model
(defaultEdgeNodeVolume
)
and for volume_model
with:
element_node0_volume_model
(defaultElementNodeVolume
Element edge models defined on each region of a device.)element_node1_volume_model
(defaultElementNodeVolume
)
These parameters are applicable to both devsim.equation()
devsim.contact_equation()
.
2.22. Release 1.4.14
2.22.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.
Please see Supported platforms for more information.
For future development, C++17
is now the recommended C++ compiler standard.
2.23. 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.24. 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.25. 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.26. 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.27. Release 1.4.9
Support for loading mesh files containing element edge data.
2.28. 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.29. Release 1.4.7
2.29.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.29.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.30. Release 1.4.6
2.30.1. Version Information
Parameter info
can be queried for getting version information. The file testing/info.py
contains an example.
python info.py
{'copyright': 'Copyright © 2009-2020 DEVSIM LLC', 'direct_solver': 'mkl_pardiso', 'extended_precision': True, 'license': 'Apache License, Version 2.0', 'version': '1.4.6', 'website': 'https://devsim.org'}
2.30.2. Extended Precision
The example examples/diode/gmsh_diode3d_float128.py
provides an example where extended precision is enabled.
2.30.3. Python Formatting
The Python
scripts in the examples
and testing
directories have been reformatted to be more consistent with language standards.
2.30.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.30.5. External Meshing
Support for reading meshes from Genius Device Simulator
has been completely removed from DEVSIM
.
2.31. 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.32. Release 1.4.4
2.32.1. Bug Fixes
An intermittent crash on Microsoft Windows 10
was occuring at the end of the program. It is now fixed.
2.32.2. Documentation
A file named CHANGES.md
is now distributed with DEVSIM
, detailing changes to the program.
2.32.3. Internal changes
Regression system script refactored to Python
Refactored threading code using
C++11
functionRefactored timing functions for verbose mode using
C++11
functionsRefactored FPE detection code to
C++11
standard
2.33. Release 1.4.3
Fix failures with the following commands:
2.34. 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 withmacOS 10.13 (High Sierra)
.The provided binary releases utilize more libraries from
Anaconda
.
2.35. Release 1.4.1
2.35.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.35.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.35.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.36. 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.37. Release 1.3.0
2.37.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.37.2. Tcl
Support Deprecated
Tcl
support is deprecated and will be removed in a future release of the software.
2.37.3. Binary Releases
2.37.3.1. Scripting Languages
Python 3
is now the only scripting language in the releases available from:
2.37.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.38. 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.39. Release 1.1.0
The Bernoulli function, \(B(x)\),
and its derivative,
have been refactored. They are used to calculate electron and hole current densities using the Scharfetter-Gummel method [10].
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.40. Release 1.0.0
2.40.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.40.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.40.3. Operating Systems
The Microsoft Windows
32-bit operating system is now supported in addition to the platforms listed in Supported platforms.
2.40.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
Please see User Interface and Installation for more information.
2.40.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:
Save the file in the
2.2
format fromGmsh
Parse the
4.0
file, and then use Custom mesh loading using scripting
A future release of DEVSIM
will provide this capability.
2.40.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.41. July 20, 2018
2.41.1. Documentation
The documentation has a new license, which is described in Copyright. The source files are now available for download from: https://github.com/devsim/devsim_documentation.
2.41.2. Python 3 Support
Python 3 executable, devsim_py3
is now supplied in addition to standard Python 2 executable, devsim
.
2.41.3. Element Information
The devsim.get_element_node_list()
retrieves a list of nodes for every element on a region
, contact
, or interface
.
2.41.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.41.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.41.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.41.7. Bug Fixes
The
devsim.interface_equation()
command is fixed fortype=fluxterm
boundary conditions on the interface.The
devsim.get_material()
, anddevsim.set_material()
handle thecontact
option.Interface equation assembly skips nodes when an interface node is shared with a contact.
2.41.8. Extended Precision
The following new parameters are available:
extended_solver
, extended precision matrix for Newton and linear solverextended_model
, extended precision model evaluationextended_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.42. May 15, 2017
2.42.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 withflat_namespace
to allow substitution of dynamically linked libraries.Microsoft Windows 7
is compiled using Microsoft Visual Studio 2017.
2.42.2. Binary Releases
Releases available from https://github.com/devsim/devsim/releases.
Centos 6
released is linked against theIntel Math Kernel Library
.Microsoft Windows 7
release is linked against theIntel Math Kernel Library
Apple macOS
can optionally use theIntel Math Kernel Library
.Anaconda
Python 2.7
is the recommended distribution.Please see release notes for more information.
2.42.3. Bug Fixes
3D element edge derivatives were not being evaluated correctly
3D equation model evaluation for element edge models
2.42.4. Enhancements
Build scripts are provided to build on various platforms.
DEVSIM
mesh format stores elements, instead of just nodes, for contact and interfacesThe
devsim.create_gmsh_mesh()
command can be used to create a device from a provided list of elements.
2.42.5. Example Availability
BJT simulation example available from https://github.com/devsim/devsim_bjt_example.
2.43. February 6, 2016
DEVSIM
is now covered by the Apache License, Version 2.0 [11]. Please see the NOTICE
and LICENSE
file for more information.
2.44. November 24, 2015
2.44.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")
2.44.2. Manual Updates
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.45. November 1, 2015
2.45.1. Convergence Info
The devsim.solve()
now supports the info
option. The solve command will then return convergence information.
2.45.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.45.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) buildBuild uses
Intel Math Kernel Library
math libraries (community edition)Build uses any compatible
Python 2.7
, includingAnaconda
Build compatible with newer
Linux
distributions.
For Apple macOS
(see macos.txt
):
Uses the system
Python 2.7
onmacOS 10.10 (Yosemite)
Provide instructions to use
Anaconda
Python
For Microsoft Windows
(see windows.txt
):
Uses any compatible
Python 2.7
, includingAnaconda
Build uses
Intel Math Kernel Library
Community Edition
Binary releases are available for these platforms at https://devsim.org.
2.46. 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.47. 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.48. July 16, 2015
The devsim.set_node_value()
was not properly setting the value. This issue is now resolved.
2.49. 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.50. October 4, 2014
2.50.1. Platform Availability
The software is now supported on the Microsoft Windows
. Please see Supported platforms for more information.
2.51. December 25, 2013
2.51.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)
Please see Installation for more information.
2.51.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.51.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.52. September 8, 2013
2.52.1. Convergence
If the simulation is diverging for 5 or more iterations, the simulation stops.
2.52.2. Bernoulli Function Derivative Evaluation
The dBdx
math function has been improved to reduce overflow.
2.52.3. Default Edge Model
The edge_index
is now a default edge models created on a region Table 4.2.
2.53. August 14, 2013
2.53.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.53.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.53.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.53.4. Fix Edge Average Model
Fixed issue with devsim.edge_average_model()
during serialization to the DEVSIM
format.
2.54. July 29, 2013
2.54.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.54.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.54.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.54.4. External Meshing
Please see Using an external mesher for more information about importing meshes from other tools.
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.
2.54.5. Math Functions
The acosh
, asinh
, atanh
, are now available math functions. Please see Table 10.2.
2.54.6. Test directory structure
Platform specific results are stored in a hierarchical fashion.