ctrsylv - Man Page

Name

ctrsylv — C-Interface

— C-Interface for triangular standard Sylvester equations.  

Synopsis

Functions

void mepack_double_trsylv_dag (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation with DAG parallelization.
void mepack_single_trsylv_dag (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation with DAG parallelization.
void mepack_double_trsylv2_dag (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation with DAG parallelization.
void mepack_single_trsylv2_dag (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation with DAG parallelization.
void mepack_double_trsylv_level2 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation.
void mepack_double_trsylv_level2_reorder (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Reordered variant)
void mepack_double_trsylv_level2_unopt (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)
void mepack_double_trsylv_level2_local_copy (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant)
void mepack_double_trsylv_level2_local_copy_32 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 32)
void mepack_double_trsylv_level2_local_copy_64 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 64)
void mepack_double_trsylv_level2_local_copy_96 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N<=96)
void mepack_double_trsylv_level2_local_copy_128 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 128)
void mepack_single_trsylv_level2 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation.
void mepack_single_trsylv_level2_reorder (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Reordered variant)
void mepack_single_trsylv_level2_unopt (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)
void mepack_single_trsylv_level2_local_copy (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant)
void mepack_single_trsylv_level2_local_copy_32 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 32 )
void mepack_single_trsylv_level2_local_copy_64 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 64)
void mepack_single_trsylv_level2_local_copy_96 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 96)
void mepack_single_trsylv_level2_local_copy_128 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 128)
void mepack_double_trsylv2_level2 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation.
void mepack_double_trsylv2_level2_reorder (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Reordered variant)
void mepack_double_trsylv2_level2_unopt (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)
void mepack_double_trsylv2_level2_local_copy (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant)
void mepack_double_trsylv2_level2_local_copy_32 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 32)
void mepack_double_trsylv2_level2_local_copy_64 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 64)
void mepack_double_trsylv2_level2_local_copy_96 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N<=96)
void mepack_double_trsylv2_level2_local_copy_128 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 128)
void mepack_single_trsylv2_level2 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation.
void mepack_single_trsylv2_level2_reorder (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Reordered variant)
void mepack_single_trsylv2_level2_unopt (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)
void mepack_single_trsylv2_level2_local_copy (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant)
void mepack_single_trsylv2_level2_local_copy_32 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 32 )
void mepack_single_trsylv2_level2_local_copy_64 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 64)
void mepack_single_trsylv2_level2_local_copy_96 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 96)
void mepack_single_trsylv2_level2_local_copy_128 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 128)
void mepack_double_trsylv_level3 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.
void mepack_double_trsylv_level3_unopt (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)
void mepack_double_trsylv_level3_2stage (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm with sub-blocking for the generalized Sylvester equation.
void mepack_single_trsylv_level3 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.
void mepack_single_trsylv_level3_unopt (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)
void mepack_single_trsylv_level3_2stage (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm with blocking for the generalized Sylvester equation.
void mepack_double_trsylv2_level3 (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.
void mepack_double_trsylv2_level3_unopt (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)
void mepack_double_trsylv2_level3_2stage (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm with blocking for the generalized Sylvester equation.
void mepack_single_trsylv2_level3 (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.
void mepack_single_trsylv2_level3_unopt (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)
void mepack_single_trsylv2_level3_2stage (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Level-3 Bartels-Stewart Algorithm with sub-blocking for the generalized Sylvester equation.
void mepack_double_trsylv_recursive (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Recursive blocking Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.
void mepack_single_trsylv_recursive (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Recursive blocking Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.
void mepack_double_trsylv2_recursive (const char *TRANSA, const char *TRANSB, double SGN, int M, int N, double *A, int LDA, double *B, int LDB, double *X, int LDX, double *SCALE, double *WORK, int *INFO)
Recursive blocking Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.
void mepack_single_trsylv2_recursive (const char *TRANSA, const char *TRANSB, float SGN, int M, int N, float *A, int LDA, float *B, int LDB, float *X, int LDX, float *SCALE, float *WORK, int *INFO)
Recursive blocking Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Detailed Description

C-Interface for triangular standard Sylvester equations.

The Fortran routines to solve the standard Sylvester equation with triangular coefficients are wrapped in C to provide an easier access to them. All wrapper routines are direct wrappers to the corresponding Fortran subroutines without sanity checks. These are performed by the Fortran routines. Since the routines are using int values to pass sizes the work_space query will fail for large scale problems. For this reason the function mepack_memory should be used to query the required work_space from a C code. This function is aware of 64 bit integers if MEPACK is compiled with it.

Function Documentation

void mepack_double_trsylv2_dag (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation with DAG parallelization.

Purpose:

mepack_double_trsylv2_dag solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_dag.

See also

dla_trsylv2_dag

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 166 of file trsylv2.c.

void mepack_double_trsylv2_level2 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_double_trsylv2_level2 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l2.

See also

dla_trsylv2_l2

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 165 of file trsylv2.c.

void mepack_double_trsylv2_level2_local_copy (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant)

Purpose:

mepack_double_trsylv2_level2_local_copy solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l2_local_copy.

See also

dla_trsylv2_l2_local_copy

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 637 of file trsylv2.c.

void mepack_double_trsylv2_level2_local_copy_128 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 128)

Purpose:

mepack_double_trsylv2_level2_local_copy_128 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l2_local_copy_128.

See also

dla_trsylv2_l2_local_copy_128

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1269 of file trsylv2.c.

void mepack_double_trsylv2_level2_local_copy_32 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 32)

Purpose:

mepack_double_trsylv2_level2_local_copy_32 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l2_local_copy_32.

See also

dla_trsylv2_l2_local_copy_32

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 795 of file trsylv2.c.

void mepack_double_trsylv2_level2_local_copy_64 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 64)

Purpose:

mepack_double_trsylv2_level2_local_copy_64 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l2_local_copy_64.

See also

dla_trsylv2_l2_local_copy_64

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 953 of file trsylv2.c.

void mepack_double_trsylv2_level2_local_copy_96 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N<=96)

Purpose:

mepack_double_trsylv2_level2_local_copy_96 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l2_local_copy_96.

See also

dla_trsylv2_l2_local_copy_96

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1111 of file trsylv2.c.

void mepack_double_trsylv2_level2_reorder (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Reordered variant)

Purpose:

mepack_double_trsylv2_level2_reorder solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l2_reorder.

See also

dla_trsylv2_l2_reorder

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 323 of file trsylv2.c.

void mepack_double_trsylv2_level2_unopt (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)

Purpose:

mepack_double_trsylv2_level2_unopt solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l2_unopt.

See also

dla_trsylv2_l2_unopt

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 480 of file trsylv2.c.

void mepack_double_trsylv2_level3 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_double_trsylv2_level3 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l3.

See also

dla_trsylv2_l3

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 168 of file trsylv2.c.

void mepack_double_trsylv2_level3_2stage (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm with blocking for the generalized Sylvester equation.

Purpose:

mepack_double_trsylv2_level3_2stage solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l3_2s.

See also

dla_trsylv2_l3_2s

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 483 of file trsylv2.c.

void mepack_double_trsylv2_level3_unopt (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)

Purpose:

mepack_double_trsylv2_level3_unopt solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l3_unopt.

See also

dla_trsylv2_l3_unopt

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 326 of file trsylv2.c.

void mepack_double_trsylv2_recursive (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Recursive blocking Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_double_trsylv2_recursive solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_recursive.

See also

dla_trsylv2_recursive

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 168 of file trsylv2.c.

void mepack_double_trsylv_dag (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation with DAG parallelization.

Purpose:

mepack_double_trsylv_dag solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_dag.

See also

dla_trsylv_dag

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 166 of file trsylv.c.

void mepack_double_trsylv_level2 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_double_trsylv_level2 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l2.

See also

dla_trsylv_l2

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 165 of file trsylv.c.

void mepack_double_trsylv_level2_local_copy (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant)

Purpose:

mepack_double_trsylv_level2_local_copy solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l2_local_copy.

See also

dla_trsylv_l2_local_copy

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 637 of file trsylv.c.

void mepack_double_trsylv_level2_local_copy_128 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 128)

Purpose:

mepack_double_trsylv_level2_local_copy_128 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l2_local_copy_128.

See also

dla_trsylv_l2_local_copy_128

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1269 of file trsylv.c.

void mepack_double_trsylv_level2_local_copy_32 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 32)

Purpose:

mepack_double_trsylv_level2_local_copy_32 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l2_local_copy_32.

See also

dla_trsylv_l2_local_copy_32

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 795 of file trsylv.c.

void mepack_double_trsylv_level2_local_copy_64 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 64)

Purpose:

mepack_double_trsylv_level2_local_copy_64 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l2_local_copy_64.

See also

dla_trsylv_l2_local_copy_64

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 953 of file trsylv.c.

void mepack_double_trsylv_level2_local_copy_96 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N<=96)

Purpose:

mepack_double_trsylv_level2_local_copy_96 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l2_local_copy_96.

See also

dla_trsylv_l2_local_copy_96

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1111 of file trsylv.c.

void mepack_double_trsylv_level2_reorder (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Reordered variant)

Purpose:

mepack_double_trsylv_level2_reorder solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l2_reorder.

See also

dla_trsylv_l2_reorder

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 323 of file trsylv.c.

void mepack_double_trsylv_level2_unopt (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)

Purpose:

mepack_double_trsylv_level2_unopt solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l2_unopt.

See also

dla_trsylv_l2_unopt

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 480 of file trsylv.c.

void mepack_double_trsylv_level3 (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_double_trsylv_level3 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l3.

See also

dla_trsylv_l3

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 168 of file trsylv.c.

void mepack_double_trsylv_level3_2stage (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm with sub-blocking for the generalized Sylvester equation.

Purpose:

mepack_double_trsylv_level3_2stage solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l3_2s.

See also

dla_trsylv_l3_2s

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 483 of file trsylv.c.

void mepack_double_trsylv_level3_unopt (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)

Purpose:

mepack_double_trsylv_level3_unopt solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l3_unopt.

See also

dla_trsylv_l3_unopt

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 326 of file trsylv.c.

void mepack_double_trsylv_recursive (const char * TRANSA, const char * TRANSB, double SGN, int M, int N, double * A, int LDA, double * B, int LDB, double * X, int LDX, double * SCALE, double * WORK, int * INFO)

Recursive blocking Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_double_trsylv_recursive solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_recursive.

See also

dla_trsylv_recursive

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 168 of file trsylv.c.

void mepack_single_trsylv2_dag (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation with DAG parallelization.

Purpose:

mepack_single_trsylv2_dag solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_dag.

See also

sla_trsylv2_dag

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 324 of file trsylv2.c.

void mepack_single_trsylv2_level2 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_single_trsylv2_level2 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_l2.

See also

sla_trsylv2_l2

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1428 of file trsylv2.c.

void mepack_single_trsylv2_level2_local_copy (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant)

Purpose:

mepack_single_trsylv2_level2_local_copy solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_l2_local_copy.

See also

sla_trsylv2_l2_local_copy

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1903 of file trsylv2.c.

void mepack_single_trsylv2_level2_local_copy_128 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 128)

Purpose:

mepack_single_trsylv2_level2_local_copy_128 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_l2_local_copy_128.

See also

sla_trsylv2_l2_local_copy_128

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 2535 of file trsylv2.c.

void mepack_single_trsylv2_level2_local_copy_32 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 32 )

Purpose:

mepack_single_trsylv2_level2_local_copy_32 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_l2_local_copy_32.

See also

sla_trsylv2_l2_local_copy_32

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 2060 of file trsylv2.c.

void mepack_single_trsylv2_level2_local_copy_64 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 64)

Purpose:

mepack_double_trsylv2_level2_local_copy_64 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv2_l2_local_copy_64.

See also

dla_trsylv2_l2_local_copy_64

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 2217 of file trsylv2.c.

void mepack_single_trsylv2_level2_local_copy_96 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 96)

Purpose:

mepack_single_trsylv2_level2_local_copy_96 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_l2_local_copy_96.

See also

sla_trsylv2_l2_local_copy_96

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 2376 of file trsylv2.c.

void mepack_single_trsylv2_level2_reorder (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Reordered variant)

Purpose:

mepack_single_trsylv2_level2_reorder solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_l2_reorder.

See also

sla_trsylv2_l2_reorder

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1587 of file trsylv2.c.

void mepack_single_trsylv2_level2_unopt (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)

Purpose:

mepack_single_trsylv2_level2_unopt solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_l2_unopt.

See also

sla_trsylv2_l2_unopt

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1744 of file trsylv2.c.

void mepack_single_trsylv2_level3 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_single_trsylv2_level3 solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_l3.

See also

sla_trsylv2_l3

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 640 of file trsylv2.c.

void mepack_single_trsylv2_level3_2stage (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm with sub-blocking for the generalized Sylvester equation.

Purpose:

mepack_single_trsylv2_level3_2stage solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_l3_2s.

See also

sla_trsylv2_l3_2s

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 956 of file trsylv2.c.

void mepack_single_trsylv2_level3_unopt (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)

Purpose:

mepack_single_trsylv2_level3_unopt solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_l3_unopt.

See also

sla_trsylv2_l3_unopt

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 799 of file trsylv2.c.

void mepack_single_trsylv2_recursive (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Recursive blocking Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_single_trsylv2_recursive solves a Sylvester equation of the following forms

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv2_recursive.

See also

sla_trsylv2_recursive

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 327 of file trsylv2.c.

void mepack_single_trsylv_dag (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation with DAG parallelization.

Purpose:

mepack_single_trsylv_dag solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_dag.

See also

sla_trsylv_dag

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 324 of file trsylv.c.

void mepack_single_trsylv_level2 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_single_trsylv_level2 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_l2.

See also

sla_trsylv_l2

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1428 of file trsylv.c.

void mepack_single_trsylv_level2_local_copy (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant)

Purpose:

mepack_single_trsylv_level2_local_copy solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_l2_local_copy.

See also

sla_trsylv_l2_local_copy

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1903 of file trsylv.c.

void mepack_single_trsylv_level2_local_copy_128 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 128)

Purpose:

mepack_single_trsylv_level2_local_copy_128 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_l2_local_copy_128.

See also

sla_trsylv_l2_local_copy_128

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 2535 of file trsylv.c.

void mepack_single_trsylv_level2_local_copy_32 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 32 )

Purpose:

mepack_single_trsylv_level2_local_copy_32 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_l2_local_copy_32.

See also

sla_trsylv_l2_local_copy_32

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 2060 of file trsylv.c.

void mepack_single_trsylv_level2_local_copy_64 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 64)

Purpose:

mepack_double_trsylv_level2_local_copy_64 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via DGEES form LAPACK.
Remarks

This function is a wrapper around dla_trsylv_l2_local_copy_64.

See also

dla_trsylv_l2_local_copy_64

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is DOUBLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is DOUBLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is DOUBLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is DOUBLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is DOUBLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is DOUBLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 2217 of file trsylv.c.

void mepack_single_trsylv_level2_local_copy_96 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Local copy variant, M,N <= 96)

Purpose:

mepack_single_trsylv_level2_local_copy_96 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_l2_local_copy_96.

See also

sla_trsylv_l2_local_copy_96

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 2376 of file trsylv.c.

void mepack_single_trsylv_level2_reorder (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Reordered variant)

Purpose:

mepack_single_trsylv_level2_reorder solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_l2_reorder.

See also

sla_trsylv_l2_reorder

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1587 of file trsylv.c.

void mepack_single_trsylv_level2_unopt (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-2 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)

Purpose:

mepack_single_trsylv_level2_unopt solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_l2_unopt.

See also

sla_trsylv_l2_unopt

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 1744 of file trsylv.c.

void mepack_single_trsylv_level3 (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_single_trsylv_level3 solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_l3.

See also

sla_trsylv_l3

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 640 of file trsylv.c.

void mepack_single_trsylv_level3_2stage (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm with blocking for the generalized Sylvester equation.

Purpose:

mepack_single_trsylv_level3_2stage solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_l3_2s.

See also

sla_trsylv_l3_2s

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 956 of file trsylv.c.

void mepack_single_trsylv_level3_unopt (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation. (Unoptimized variant)

Purpose:

mepack_single_trsylv_level3_unopt solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_l3_unopt.

See also

sla_trsylv_l3_unopt

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 799 of file trsylv.c.

void mepack_single_trsylv_recursive (const char * TRANSA, const char * TRANSB, float SGN, int M, int N, float * A, int LDA, float * B, int LDB, float * X, int LDX, float * SCALE, float * WORK, int * INFO)

Recursive blocking Level-3 Bartels-Stewart Algorithm for the generalized Sylvester equation.

Purpose:

mepack_single_trsylv_recursive solves a Sylvester equation of the following forms

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M quasi upper triangular matrix, B is a N-by-N quasi upper triangular
matrix. The right hand side Y and the solution X are M-by-N matrices.  Typically the matrices
A and B are generated via SGEES form LAPACK.
Remarks

This function is a wrapper around sla_trsylv_recursive.

See also

sla_trsylv_recursive

Parameters

TRANSA

         TRANSA is string
         Specifies the form of the system of equations with respect to A:
         == 'N':  op1(A) = A
         == 'T':  op1(A) = A**T

TRANSB

         TRANSB is string
         Specifies the form of the system of equations with respect to B:
         == 'N':  op2(B) = B,
         == 'T':  op2(B) = B**T

SGN

         SGN is SINGLE PRECISION, allowed values: +/-1
         Specifies the sign between the two parts of the Sylvester equation.
         = 1 :  Solve Equation (1)
         == -1:  Solve Equation (2)

M

         M is INTEGER
         The order of the matrices A and C.  M >= 0.

N

         N is INTEGER
         The order of the matrices B and D.  N >= 0.

A

         A is SINGLE PRECISION array, dimension (LDA,M)
         The matrix A must be (quasi-) upper triangular.

LDA

         LDA is INTEGER
         The leading dimension of the array A.  LDA >= max(1,M).

B

         B is SINGLE PRECISION array, dimension (LDB,N)
         The matrix B must be (quasi-) upper triangular.

LDB

         LDB is INTEGER
         The leading dimension of the array B.  LDB >= max(1,N).

X

         X is SINGLE PRECISION array, dimension (LDX,N)
         On input, the matrix X contains the right hand side Y.
         On output, the matrix X contains the solution of Equation (1) or (2)
         as selected by TRANSA, TRANSB, and SGN.
         Right hand side Y and the solution X are M-by-N matrices.

LDX

         LDX is INTEGER
         The leading dimension of the array X.  LDB >= max(1,M).

SCALE

         SCALE is SINGLE PRECISION
         SCALE is a scaling factor to prevent the overflow in the result.
         If INFO == 0 then SCALE is 1.0D0 otherwise if one of the inner systems
         could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

         WORK is SINGLE PRECISION array, dimension LDWORK
         Workspace for the algorithm.
         The workspace needs to queried before the running the computation.
         The query is performed by calling the subroutine with INFO == -1 on input.
         The required workspace is then returned in INFO.

INFO

         INFO is INTEGER

         On input:
           == -1 : Perform a workspace query
           <> -1 : normal operation

         On exit, workspace query:
           < 0 :  if INFO == -i, the i-Th argument had an illegal value
           >= 0:  The value of INFO is the required number of elements in the workspace.

         On exit, normal operation:
           == 0:  successful exit
           < 0:  if INFO == -i, the i-Th argument had an illegal value
           > 0:  The equation is not solved correctly. One of the arising inner
                 system got singular.
Author

Martin Koehler, MPI Magdeburg

Date

January 2024

Definition at line 327 of file trsylv.c.

Author

Generated automatically by Doxygen for MEPACK from the source code.

Info

Fri Oct 25 2024 00:00:00 Version 1.1.1 MEPACK