OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
lapacke_ztgsyl_work.c File Reference
#include "lapacke_utils.h"

Go to the source code of this file.

Functions

lapack_int LAPACKE_ztgsyl_work (int matrix_layout, char trans, lapack_int ijob, lapack_int m, lapack_int n, const lapack_complex_double *a, lapack_int lda, const lapack_complex_double *b, lapack_int ldb, lapack_complex_double *c, lapack_int ldc, const lapack_complex_double *d, lapack_int ldd, const lapack_complex_double *e, lapack_int lde, lapack_complex_double *f, lapack_int ldf, double *scale, double *dif, lapack_complex_double *work, lapack_int lwork, lapack_int *iwork)

Function Documentation

◆ LAPACKE_ztgsyl_work()

lapack_int LAPACKE_ztgsyl_work ( int matrix_layout,
char trans,
lapack_int ijob,
lapack_int m,
lapack_int n,
const lapack_complex_double * a,
lapack_int lda,
const lapack_complex_double * b,
lapack_int ldb,
lapack_complex_double * c,
lapack_int ldc,
const lapack_complex_double * d,
lapack_int ldd,
const lapack_complex_double * e,
lapack_int lde,
lapack_complex_double * f,
lapack_int ldf,
double * scale,
double * dif,
lapack_complex_double * work,
lapack_int lwork,
lapack_int * iwork )

Definition at line 35 of file lapacke_ztgsyl_work.c.

46{
47 lapack_int info = 0;
48 if( matrix_layout == LAPACK_COL_MAJOR ) {
49 /* Call LAPACK function and adjust info */
50 LAPACK_ztgsyl( &trans, &ijob, &m, &n, a, &lda, b, &ldb, c, &ldc, d,
51 &ldd, e, &lde, f, &ldf, scale, dif, work, &lwork, iwork,
52 &info );
53 if( info < 0 ) {
54 info = info - 1;
55 }
56 } else if( matrix_layout == LAPACK_ROW_MAJOR ) {
57 lapack_int lda_t = MAX(1,m);
58 lapack_int ldb_t = MAX(1,n);
59 lapack_int ldc_t = MAX(1,m);
60 lapack_int ldd_t = MAX(1,m);
61 lapack_int lde_t = MAX(1,n);
62 lapack_int ldf_t = MAX(1,m);
63 lapack_complex_double* a_t = NULL;
64 lapack_complex_double* b_t = NULL;
65 lapack_complex_double* c_t = NULL;
66 lapack_complex_double* d_t = NULL;
67 lapack_complex_double* e_t = NULL;
68 lapack_complex_double* f_t = NULL;
69 /* Check leading dimension(s) */
70 if( lda < m ) {
71 info = -7;
72 LAPACKE_xerbla( "LAPACKE_ztgsyl_work", info );
73 return info;
74 }
75 if( ldb < n ) {
76 info = -9;
77 LAPACKE_xerbla( "LAPACKE_ztgsyl_work", info );
78 return info;
79 }
80 if( ldc < n ) {
81 info = -11;
82 LAPACKE_xerbla( "LAPACKE_ztgsyl_work", info );
83 return info;
84 }
85 if( ldd < m ) {
86 info = -13;
87 LAPACKE_xerbla( "LAPACKE_ztgsyl_work", info );
88 return info;
89 }
90 if( lde < n ) {
91 info = -15;
92 LAPACKE_xerbla( "LAPACKE_ztgsyl_work", info );
93 return info;
94 }
95 if( ldf < n ) {
96 info = -17;
97 LAPACKE_xerbla( "LAPACKE_ztgsyl_work", info );
98 return info;
99 }
100 /* Query optimal working array(s) size if requested */
101 if( lwork == -1 ) {
102 LAPACK_ztgsyl( &trans, &ijob, &m, &n, a, &lda_t, b, &ldb_t, c,
103 &ldc_t, d, &ldd_t, e, &lde_t, f, &ldf_t, scale, dif,
104 work, &lwork, iwork, &info );
105 return (info < 0) ? (info - 1) : info;
106 }
107 /* Allocate memory for temporary array(s) */
108 a_t = (lapack_complex_double*)
109 LAPACKE_malloc( sizeof(lapack_complex_double) * lda_t * MAX(1,m) );
110 if( a_t == NULL ) {
112 goto exit_level_0;
113 }
114 b_t = (lapack_complex_double*)
115 LAPACKE_malloc( sizeof(lapack_complex_double) * ldb_t * MAX(1,n) );
116 if( b_t == NULL ) {
118 goto exit_level_1;
119 }
120 c_t = (lapack_complex_double*)
121 LAPACKE_malloc( sizeof(lapack_complex_double) * ldc_t * MAX(1,n) );
122 if( c_t == NULL ) {
124 goto exit_level_2;
125 }
126 d_t = (lapack_complex_double*)
127 LAPACKE_malloc( sizeof(lapack_complex_double) * ldd_t * MAX(1,m) );
128 if( d_t == NULL ) {
130 goto exit_level_3;
131 }
132 e_t = (lapack_complex_double*)
133 LAPACKE_malloc( sizeof(lapack_complex_double) * lde_t * MAX(1,n) );
134 if( e_t == NULL ) {
136 goto exit_level_4;
137 }
138 f_t = (lapack_complex_double*)
139 LAPACKE_malloc( sizeof(lapack_complex_double) * ldf_t * MAX(1,n) );
140 if( f_t == NULL ) {
142 goto exit_level_5;
143 }
144 /* Transpose input matrices */
145 LAPACKE_zge_trans( matrix_layout, m, m, a, lda, a_t, lda_t );
146 LAPACKE_zge_trans( matrix_layout, n, n, b, ldb, b_t, ldb_t );
147 LAPACKE_zge_trans( matrix_layout, m, n, c, ldc, c_t, ldc_t );
148 LAPACKE_zge_trans( matrix_layout, m, m, d, ldd, d_t, ldd_t );
149 LAPACKE_zge_trans( matrix_layout, n, n, e, lde, e_t, lde_t );
150 LAPACKE_zge_trans( matrix_layout, m, n, f, ldf, f_t, ldf_t );
151 /* Call LAPACK function and adjust info */
152 LAPACK_ztgsyl( &trans, &ijob, &m, &n, a_t, &lda_t, b_t, &ldb_t, c_t,
153 &ldc_t, d_t, &ldd_t, e_t, &lde_t, f_t, &ldf_t, scale,
154 dif, work, &lwork, iwork, &info );
155 if( info < 0 ) {
156 info = info - 1;
157 }
158 /* Transpose output matrices */
159 LAPACKE_zge_trans( LAPACK_COL_MAJOR, m, n, c_t, ldc_t, c, ldc );
160 LAPACKE_zge_trans( LAPACK_COL_MAJOR, m, n, f_t, ldf_t, f, ldf );
161 /* Release memory and exit */
162 LAPACKE_free( f_t );
163exit_level_5:
164 LAPACKE_free( e_t );
165exit_level_4:
166 LAPACKE_free( d_t );
167exit_level_3:
168 LAPACKE_free( c_t );
169exit_level_2:
170 LAPACKE_free( b_t );
171exit_level_1:
172 LAPACKE_free( a_t );
173exit_level_0:
174 if( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) {
175 LAPACKE_xerbla( "LAPACKE_ztgsyl_work", info );
176 }
177 } else {
178 info = -1;
179 LAPACKE_xerbla( "LAPACKE_ztgsyl_work", info );
180 }
181 return info;
182}
logical function lde(ri, rj, lr)
Definition dblat2.f:2942
#define LAPACK_ztgsyl(...)
Definition lapack.h:20522
#define lapack_int
Definition lapack.h:83
#define lapack_complex_double
Definition lapack.h:63
#define LAPACK_COL_MAJOR
Definition lapacke.h:53
#define LAPACKE_free(p)
Definition lapacke.h:46
#define LAPACK_ROW_MAJOR
Definition lapacke.h:52
#define LAPACKE_malloc(size)
Definition lapacke.h:43
#define LAPACK_TRANSPOSE_MEMORY_ERROR
Definition lapacke.h:56
void LAPACKE_xerbla(const char *name, lapack_int info)
void LAPACKE_zge_trans(int matrix_layout, lapack_int m, lapack_int n, const lapack_complex_double *in, lapack_int ldin, lapack_complex_double *out, lapack_int ldout)
#define MAX(x, y)
n