===============================================================================
Update February 5, 2017
This is SLICOT Release 5.6.
Updated routines:
================
BB01AD : added code to allow reading data from a specified file for
the CAREX example 4.4. Added a 4-th element to the input
argument IPAR, to store the length of the file name string.
MA02HD : set function value to .FALSE. if min(m,n) = 0.
MB02TD, : replaced "DOUBLE PRECISION" by "INTEGER" when defining
TB04AD parameter IWORK (in comments, line 22 and line 155,
respectively).
MB02UW : removed EPS*CMAX from the definition of SMINI, and moved
the evaluation of the maximum magnitude of B, when N = 2,
in the segment with CMAX < SMINI.
MB03DD : Removed the call to DGGEV and the associated error returns
INFO = 1 and INFO = 2. Also omitted the paired call to
DHGEQZ for the submatrices of order N1. Replaced those
two calls by a call to DLAG2 (if N1 = 2), after making
B11 upper triangular, if necessary, and updating A11.
Included norm scaling/unscaling of the current matrices
before/after calling DTGSEN.
Shortened the code for N1 = N2 = 1, by using calls to
DTGEX2.
Added special code for the case A21 = 0 and B21 = 0 when
UPLO = 'L'. This implies call(s) to DGGES if N1 and/or N2
is/are equal to 2.
MB03FD : Added scaling of matrix entries for the 2-by-2 case.
When DGGES fails (for N1+N2 = 4), the balancing routine MB04DL
is called (for the previously saved A and B), and DGGES is
then called again for the balanced pencil. If it fails
again, then an error return is generated.
DGGES failed to converge in MB03FD for CAREX example 4.4.
MB03LD : used a simpler formula for LIWORK when COMPQ = 'N', and added
a warning when some eigenvalues might be inaccurate.
MB03LP : added the argument IWORK in the calls of MB04BP, used a simpler
formula for LIWORK when COMPQ = 'N', and added a warning when
some eigenvalues might be inaccurate.
MB03LZ : added the argument IWORK in the calls of MB04FD and in the
argument list, reduced the real workspace by N*N when COMPQ = 'N',
and added a warning when the pencil is numerically singular.
MB3LZP : added the argument IWORK in the calls of MB04FP, reduced the
real workspace by N*N when COMPQ = 'N', and added a warning
when the pencil is numerically singular.
MB04BP : added further information in IWORK about unreliable,
possibly inaccurate eigenvalues. Specifically, for
i = q+2, ..., 2*q+1, IWORK(i) contains a pointer to
the starting location in DWORK of the i-th quadruple of
1-by-1 blocks, if IWORK(i-q) > 0, or 2-by-2 blocks,
if IWORK(i-q) < 0.
Also, the number of infinite eigenvalues, if S is diagonal,
or a lower bound of this number, otherwise, is found.
Based on this information, the largest (in modulus)
eigenvalues are set to infinity, if necessary.
MB04BZ : reduced by N*N the length of DWORK for JOB = 'E' and COMPQ = 'N'.
MB04ED : added a warning when some eigenvalues might be inaccurate.
MB04FP : added the argument IWORK, which contains, on exit, information
about the nature and location of unreliable, possibly inaccurate
eigenvalues, and pointers to the starting locations in DWORK
of the 2-by-2 blocks having those eigenvalues.
The Frobenius norms of the given pencil matrices are saved in
the working array DWORK on exit.
Added a warning when some eigenvalues might be inaccurate.
Also, the number of infinite eigenvalues, if S is diagonal,
or a lower bound of this number, otherwise, is found.
Based on this information, the largest (in modulus)
eigenvalues are set to infinity, if necessary.
A fast determinant test is first used to check possible
singularities. If this test passes, a more reliable
singular value test is made, using the LAPACK routine DLAS2,
preceded by a Givens triangularization for full 2-by-2 blocks.
MB04HD : changed the definition for INFO = 2 and INFO = 3, according
to the modifications in MB03DD and MB03FD. Omitted the
DGGEV call for computing the optimal workspace.
MB04TT : replaced the "less than" test in the lines 246 and 365 by
"less than or equal" tests, and the "greater than or equal"
test in the line 377 by a "greater than" that.
SB03MD : set SEP to 0 for N = 0.
TG01FD : added an assignment statement for the value of a pointer to
the workspace (line 598).
Fixed a bug when applying the transformation reducing A22 to
a SVD-like upper triangular form (for JOBA = 'R').
TG01HY : added N1 to the estimates of the optimal workspace for the
calls of DGEQRF and DORMQR (for LDWORK = -1).
Set MINWRK = 1 for MIN( N1, M ) = 0.
Fixed the computation of Q when COMPQ = 'U' and optimal
workspace is available.
Improved routines:
=================
MA02ID : improved performance, by removing O(n) tests in some loops.
MB03BD : improved the singularity test for 2-by-2 blocks in the
factors of the formal matrix product. A fast determinant
test is first used. If this test passes, a more reliable
singular value test is made, using the LAPACK routine DLAS2,
preceded by a Givens triangularization for full 2-by-2 blocks.
MB04BD : added further information in IWORK about unreliable,
possibly inaccurate eigenvalues. Specifically, for
i = q+2, ..., 2*q+1, IWORK(i) contains a pointer to
the starting location in DWORK of the i-th quadruple of
1-by-1 blocks, if IWORK(i-q) > 0, or 2-by-2 blocks,
if IWORK(i-q) < 0.
Also, the number of infinite eigenvalues, if S is diagonal,
or a lower bound of this number, otherwise, is found.
Based on this information, the largest (in modulus)
eigenvalues are set to infinity, if necessary.
MB04BZ : added the argument IWORK, which contains, on exit, information
about unreliable, possibly inaccurate eigenvalues, including
pointers to the starting locations in DWORK of the 2-by-2 blocks,
corresponding to those eigenvalues.
Added a warning when the pencil is singular.
MB04FD : added the argument IWORK, which contains, on exit, information
about the nature and location of unreliable, possibly inaccurate
eigenvalues, and pointers to the starting locations in DWORK
of the 2-by-2 blocks, having those eigenvalues.
The Frobenius norms of the given pencil matrices are saved in
the working array DWORK on exit.
Added a warning when the pencil is singular.
Also, the number of infinite eigenvalues, if S is diagonal,
or a lower bound of this number, otherwise, is found.
Based on this information, the largest (in modulus)
eigenvalues are set to infinity, if necessary.
A fast determinant test is first used to check possible
singularities. If this test passes, a more reliable
singular value test is made, using the LAPACK routine DLAS2,
preceded by a Givens triangularization for full 2-by-2 blocks.
TG01FD : replaced LN by K = min( L, N-1 ) in the DTZRZF and DORMRZ calls
used for computing the optimal workspace size, and replaced the
argument NA22 by N in two other DORMRZ calls (in the computational
part).
Updated Example Programs:
========================
TBB01AD : changed the length of IPAR.
TMB03KD : changed the dimension of working arrays, according to
the modifications in MB03BD.
TMB03LD : changed the dimension of IWORK array, according to
the modifications in MB03LD.
TMB03LZ : changed the dimension of IWORK array, according to
the modifications in MB03LZ.
TMB04BD : changed the dimension of working array IWORK, according to
the modifications in MB03BD.
TMB04BZ, : added the argument IWORK in the calls of MB04BZ and MB04FD,
TMB04FD respectively.
Updated make files:
==================
Updated the makefile files for the new routines and new example
programs, for both Windows and Unix machines.
Updated Documentation:
=====================
Updated the html files for changes in the source comments and example
program files.
Updated the index files, libindex and support, for the 15 new main
routines and 18 auxiliary routines, all documented.
New Routines (33), 15 main and 18 auxiliary routines:
=================
AB08NW : constructs for a linear multivariable system, described by a
state-space model, a regular pencil which has the invariant
zeros of the system as generalized eigenvalues, computes
the orders of the infinite Smith zeros, and determines the
singular and infinite Kronecker structure of the system
pencil. This is an extended version of the routine AB08ND.
AB08NY : extracts from the system pencil a "reduced" system pencil,
having the same transmission zeros, but with the
feedthrough matrix of full row rank.
This is an extended version of the routine AB08NX.
MA02HZ : computes the value of the one norm, or the Frobenius norm,
or the infinity norm, or the element of largest absolute
value of a complex skew-Hermitian matrix.
MA02MD : computes the value of the one norm, or the Frobenius norm,
or the infinity norm, or the element of largest absolute
value of a real skew-symmetric matrix.
MA02MZ : computes the value of the one norm, or the Frobenius norm,
or the infinity norm, or the element of largest absolute
value of a complex skew-Hermitian matrix.
MA02NZ : permutes two specified rows and corresponding columns of a
(skew-)symmetric/Hermitian complex matrix.
MA02OD, : computes the number of zero rows (and zero columns) of a real
MA02OZ or complex (skew-)symmetric/Hermitian matrix, respectively.
MA02PD, : computes the number of zero rows and zero columns of a real
MA02PZ or complex matrix, respectively.
MB03QG : reorders the diagonal blocks of a principal subpencil of an
upper quasi-triangular matrix pencil A-lambda*E, together with
their generalized eigenvalues, using orthogonal equivalence
transformations. After reordering, the leading block of the
selected subpencil has generalized eigenvalues in a suitably
defined domain of interest, usually related to stability/
instability in a continuous- or discrete-time sense.
MB03QV : computes the eigenvalues of an upper quasi-triangular matrix
pencil.
MB03QW : computes the eigenvalues of a selected 2-by-2 diagonal block
pair of an upper quasi-triangular pencil, reduces the selected
block pair to the standard form, and splits it in the case of
real eigenvalues, by constructing orthogonal matrices UT and VT.
The transformations UT and VT are applied to the pair (A,E), by
computing (UT'*A*VT, UT'*E*VT ), and to the matrices U and V,
by computing U*UT and V*VT.
MB04DB : applies the inverse of a balancing transformation, computed
by MB04DP.
MB4DBZ : applies the inverse of a balancing transformation, computed
by MB4DPZ.
MB04DL : balances a real pencil, optionally avoiding large norms for
the scaled (sub)matrices. Intended to replace the LAPACK
routine DGGBAL, which can return scaled (sub)matrices of
very large norms.
MB4DLZ : balances a complex pencil, optionally avoiding large norms for
the scaled (sub)matrices. Intended to replace the LAPACK
routine ZGGBAL, which can return scaled (sub)matrices of
very large norms.
MB04DP : balances a real skew-Hamiltonian/Hamiltonian pencil,
aS - bH, exploiting the structure and optionally avoiding
large norms for the scaled (sub)matrices.
MB4DPZ : balances a complex skew-Hamiltonian/Hamiltonian pencil,
exploiting the structure and optionally avoiding large
norms for the scaled (sub)matrices.
TB01KX : computes an additive spectral decomposition of the transfer-
function matrix of the system (A,B,C) by reducing the system
state-matrix A to a block-diagonal form. It is assumed that A is
in a real Schur form, and the leading diagonal block of order d
has eigenvalues distinct from those of the trailing diagonal
block. The system matrices are transformed as
A <-- V*A*U, B <--V*B and C <-- C*U, where V = inv(U),
preserving the spectra of the two diagonal blocks.
TB01PX : finds a reduced (controllable, observable, or minimal) state-
space representation (Ar,Br,Cr) for any original state-space
representation (A,B,C). The matrix Ar is in upper block
Hessenberg staircase form.
TB01UX : computes an orthogonal transformation matrix Z which reduces the
N-th order system (A,B,C) to the form
( Ano * ) ( Bno )
Z'*A*Z = ( ) , Q'*B = ( ) ,
( 0 Ao ) ( Bo )
C*Z = ( 0 Co ) ,
where the NOBSV-th order system (Ao,Bo,Co) is observable.
The matrix Ano of order N-NOBSV contains the unobservable
eigenvalues of A.
The pencil ( Ao-lambda*I ) has full column rank NOBSV for all
( Co )
lambda, and is in a staircase form, with
_ _ _ _
( Ak,k Ak,k-1 ... Ak,2 Ak,1 )
( _ _ _ _ )
( Ao ) = ( Ak-1,k Ak-1,k-1 ... Ak-1,2 Ak-1,1 ) ,
( Co ) ( : : ... _ : _ : )
( 0 0 ... A1,2 A1,1 )
( _ )
( 0 0 ... 0 A0,1 )
_
where Ai-1,i is a CTAU(i-1)-by-CTAU(i) full column rank matrix
(with CTAU(0) = row size of C).
The orthogonal transformation Z, performed to reduce the system
matrices, can be optionally accumulated.
The reduced order system (Ao,Bo,Co) has the same transfer-function
matrix as the original system (A,B,C).
TB01UY : finds a controllable realization for the linear time-invariant
multi-input system
dX/dt = A * X + B1 * U1 + B2 * U2,
Y = C * X,
where A, B1, B2 and C are N-by-N, N-by-M1, N-by-M2, and P-by-N
matrices, respectively, and A and [B1,B2] are reduced by this
routine to orthogonal canonical form using (and optionally
accumulating) orthogonal similarity transformations, which are
also applied to C. Specifically, the system (A, [B1,B2], C) is
reduced to the triplet (Ac, [Bc1,Bc2], Cc), where
Ac = Z' * A * Z, [Bc1,Bc2] = Z' * [B1,B2], Cc = C * Z, with
[ Acont * ] [ Bcont1, Bcont2 ]
Ac = [ ], [Bc1,Bc1] = [ ],
[ 0 Auncont ] [ 0 0 ]
and
[ A11 A12 . . . A1,p-2 A1,p-1 A1p ]
[ A21 A22 . . . A2,p-2 A2,p-1 A2p ]
[ A31 A32 . . . A3,p-2 A3,p-1 A3p ]
[ 0 A42 . . . A4,p-2 A4,p-1 A4p ]
Acont = [ . . . . . . . . ], (1)
[ . . . . . . . ]
[ . . . . . . ]
[ 0 0 . . . Ap,p-2 Ap,p-1 App ]
[ B11 B12 ]
[ 0 B22 ]
[ 0 0 ]
[ 0 0 ]
[Bc1,Bc2] = [ . . ],
[ . . ]
[ . . ]
[ 0 0 ]
where the blocks B11, B22, A31, ..., Ap,p-2 have full row ranks
and p is the controllability index of the pair (A,[B1,B2]).
The size of the block Auncont is equal to the dimension of the
uncontrollable subspace of the pair (A,[B1,B2]).
TB01WX : reduces the system state matrix A to an upper Hessenberg form
by using an orthogonal similarity transformation A <-- U'*A*U and
applies the transformation to the matrices B and C: B <-- U'*B
and C <-- C*U.
TG01GD : finds a reduced descriptor representation (Ar-lambda*Er,Br,Cr)
without non-dynamic modes for a descriptor representation
(A-lambda*E,B,C). Optionally, the reduced descriptor system can
be put into a standard form with the leading diagonal block
of Er identity.
TG01HU : given the descriptor system (A-lambda*E,B,C) with the system
matrices A, E and B of the form
( A1 X1 ) ( E1 Y1 ) ( B1 B2 )
A = ( ) , E = ( ) , B = ( ) ,
( 0 X2 ) ( 0 Y2 ) ( 0 0 )
where
- B is an L-by-(M1+M2) matrix,
with B1 an N1-by-M1 submatrix, B2 an N1-by-M2 submatrix,
- A is an L-by-N matrix, with A1 an N1-by-N1 submatrix,
- E is an L-by-N matrix, with E1 an N1-by-N1 submatrix
with LBE nonzero sub-diagonals,
this routine reduces the pair (A1-lambda*E1,[B1 B2]) to the form
Qc'*[B1 B2 A1-lambda*E1 ]*diag(I,Zc) =
( Bc1 Bc2 Ac-lambda*Ec * )
( ) ,
( 0 0 0 Anc-lambda*Enc )
where:
1) the pencil ( Bc1 Bc2 Ac-lambda*Ec ) has full row rank NR for
all finite lambda and is in a staircase form with Ac given by
the right hand side matrix in (1), and
[ A1,-1 A1,0 ]
[ 0 A2,0 ]
[ 0 0 ] ( E11 E12 ... E1p )
[ 0 0 ] ( 0 E22 ... E2p )
[Bc1 Bc2] = [ . . ], Ec = ( . . . . ),
[ . . ] ( . . . . )
[ . . ] ( 0 0 ... Epp )
[ 0 0 ]
where the block Ai,i-2 is an rtau(i)-by-rtau(i-2) full row
rank matrix (with rtau(-1) = M1, rtau(0) = M2) and Ei,i is an
rtau(i)-by-rtau(i) upper triangular matrix.
2) the pencil Anc-lambda*Enc is regular of order N1-NR with Enc
upper triangular; this pencil contains the uncontrollable
finite eigenvalues of the pencil (A1-lambda*E1).
The transformations are applied to the whole matrices A, E, B,
and C. The left and/or right orthogonal transformations Qc and Zc,
performed to reduce the pencil, can be optionally accumulated in
the matrices Q and Z, respectively.
The reduced order descriptor system (Ac-lambda*Ec,Bc,Cc) has no
uncontrollable finite eigenvalues and has the same transfer-
function matrix as the original system, (A-lambda*E,B,C).
TG01LD : computes orthogonal transformation matrices Q and Z which reduce
the regular pole pencil A-lambda*E of the descriptor system
(A-lambda*E,B,C) to the form
( Af * ) ( Ef * )
Q'*A*Z = ( ) , Q'*E*Z = ( ) , (2)
( 0 Ai ) ( 0 Ei )
or to the form
( Ai * ) ( Ei * )
Q'*A*Z = ( ) , Q'*E*Z = ( ) , (3)
( 0 Af ) ( 0 Ef )
where the subpencil Af-lambda*Ef, with Ef nonsingular and upper
triangular, contains the finite eigenvalues, and the subpencil
Ai-lambda*Ei, with Ai nonsingular and upper triangular, contains
the infinite eigenvalues. The subpencil Ai-lambda*Ei is in a
staircase form. Optionally, the submatrix Af is further reduced
to an upper Hessenberg form.
TG01LY : computes orthogonal transformation matrices Q and Z which reduce
the regular pole pencil A-lambda*E of the descriptor system
(A-lambda*E,B,C), with the A and E matrices in the form
( A11 A12 A13 ) ( E11 0 0 )
A = ( A21 A22 A23 ) , E = ( 0 0 0 ) ,
( A31 0 0 ) ( 0 0 0 )
where E11 and A22 are nonsingular and upper triangular matrices,
to the form (2), where the subpencils Af-lambda*Ef and Ai-lambda*Ei
contain the finite and the infinite eigenvalues, respectively.
The subpencil Ai-lambda*Ei is in a staircase form with the
matrices Ai and Ei of form
( A0,0 A0,k ... A0,1 ) ( 0 E0,k ... E0,1 )
Ai = ( 0 Ak,k ... Ak,1 ) , Ei = ( 0 0 ... Ek,1 ) ,
( : : ... : ) ( : : ... : )
( 0 0 ... A1,1 ) ( 0 0 ... 0 )
where Ai,i , for i = 0, 1, ..., k, are nonsingular upper triangular
matrices.
TG01MD : computes orthogonal transformation matrices Q and Z which reduce
the regular pole pencil A-lambda*E of the descriptor system
(A-lambda*E,B,C) to the form (2) or (3), where the pair (Af,Ef)
is in a generalized real Schur form, with Ef nonsingular and upper
triangular and Af in real Schur form.
The subpencil Af-lambda*Ef contains the finite eigenvalues.
The pair (Ai,Ei) is in a generalized real Schur form with
both Ai and Ei upper triangular. The subpencil Ai-lambda*Ei,
with Ai nonsingular and Ei nilpotent, contains the infinite
eigenvalues and is in a block staircase form.
TG01ND : computes equivalence transformation matrices Q and Z which reduce
the regular pole pencil A-lambda*E of the descriptor system
(A-lambda*E,B,C) to the form
( Af 0 ) ( Ef 0 )
Q*A*Z = ( ) , Q*E*Z = ( ) ,
( 0 Ai ) ( 0 Ei )
or to the form
( Ai 0 ) ( Ei 0 )
Q*A*Z = ( ) , Q*E*Z = ( ) ,
( 0 Af ) ( 0 Ef )
where the pair (Af,Ef) is in a generalized real Schur form, with
Ef nonsingular and upper triangular and Af in real Schur form.
The subpencil Af-lambda*Ef contains the finite eigenvalues.
The pair (Ai,Ei) is in a generalized real Schur form with
both Ai and Ei upper triangular. The subpencil Ai-lambda*Ei,
with Ai nonsingular and Ei nilpotent contains the infinite
eigenvalues and is in a block staircase form.
This decomposition corresponds to an additive decomposition of
the transfer-function matrix of the descriptor system as the
sum of a proper term and a polynomial term.
TG01NX : computes equivalence transformation matrices Q and Z which reduce
the regular pole pencil A-lambda*E of the descriptor system
(A-lambda*E,B,C), with (A,E) in a generalized real Schur form,
to the block-diagonal form
( A1 0 ) ( E1 0 )
Q*A*Z = ( ) , Q*E*Z = ( ) ,
( 0 A2 ) ( 0 E2 )
where the pair (Q*A*Z,Q*E*Z) is in a generalized real Schur form,
with (A1,E1) and (A2,E2) having no common generalized eigenvalues.
This decomposition corresponds to an additive spectral
decomposition of the transfer-function matrix of the descriptor
system as the sum of two terms containing the generalized
eigenvalues of (A1,E1) and (A2,E2), respectively.
TG01PD : computes orthogonal transformation matrices Q and Z which reduce
the regular pole pencil A-lambda*E of the descriptor system
(A-lambda*E,B,C) to the generalized real Schur form with ordered
generalized eigenvalues. The pair (A,E) is reduced to the form
( * * * * ) ( * * * * )
( ) ( )
( 0 A1 * * ) ( 0 E1 * * )
Q'*A*Z = ( ) , Q'*E*Z = ( ) ,
( 0 0 A2 * ) ( 0 0 E2 * )
( ) ( )
( 0 0 0 * ) ( 0 0 0 * )
where the subpencil A1-lambda*E1 contains the eigenvalues which
belong to a suitably defined domain of interest and the subpencil
A2-lambda*E2 contains the eigenvalues which are outside of the
domain of interest.
Optionally, the pair (A,E) is assumed to be already in a
generalized real Schur form and the reduction is performed only
on the subpencil A12 - lambda*E12 defined by rows and columns
NLOW to NSUP of A - lambda*E.
TG01QD : computes orthogonal transformation matrices Q and Z which reduce
the regular pole pencil A-lambda*E of the descriptor system
(A-lambda*E,B,C) to the generalized real Schur form with ordered
generalized eigenvalues. The pair (A,E) is reduced to the form
( A1 * * ) ( E1 * * )
Q'*A*Z = ( 0 A2 * ) , Q'*E*Z = ( 0 E2 * ) ,
( 0 0 A3 ) ( 0 0 E2 )
where the subpencils Ak-lambda*Ek, for k = 1, 2, 3, contain the
generalized eigenvalues which belong to certain domains of
interest.
New example programs (15):
=========================
TAB08NW, : T is the example program for the newly added main
TMB03QG, routine called .
TMB04DL,
TMB04DP,
TMB4DLZ,
TMB4DPZ,
TTB01PX,
TTB01UY,
TTB01WX,
TTG01GD,
TTG01LD,
TTG01MD,
TTG01ND,
TTG01PD,
TTG01QD
Documentation:
=============
All new routines have associated html documentation, accessible from
the Library indexes libindex.html (15 new documents) and support.html
(18 new documents).
Updated MEX-files:
=================
arebench : added an input argument specifying an alternative file name
for CAREX example 4.4. Added code to process this case.
arecond, : changes to avoid exceeding 72 characters per line when
isprpr, using the Fortran preprocessor in MATLAB.
syscom
hapack_haeig : allocated IWORK for task = 7 and task = 8, as well as for
task = 9 and task = 10 (when G is not needed).
These changes were required after modifying SG03ZD.
skewHamil2eig, : performed modifications according to the changes made in
skewHamil2feig, the routines MB04FD, MB04ED, MB03LD, MB04BZ, MB04BD, and
skewHamildefl, MB04BZ, respectively.
skewHamildeflZ, Added an option to return information about unreliable
skewHamileig, eigenvalues and optional output arguments for storing
skewHamileigZ that information (in skewHamil2eig, skewHamileig, and
skewHamileigZ).
syscom.F : replaced ALLOCATE by mxCalloc statements, to ensure
reproducibility of the results.
Updated M-files:
===============
test_skewHamil2eig : added tests for returned norms and numerically
infinite eigenvalues.
Correctly computed the relative error of
eigenvalues with respect to eig results.
test_skewHamileigZ : added tests for returned norms and numerically
infinite eigenvalues.
New versions of SLICOT-based MATLAB toolboxes:
=============================================
SLICOT-based MATLAB toolboxes for MATLAB R2015b on Windows and Linux
platforms (64 bit) are available under commercial licenses.