1*1858f998SYi Kong /*
2*1858f998SYi Kong * Written by D.P. Manley, Digital Equipment Corporation.
3*1858f998SYi Kong * Prefixed "C_" to BLAS routines and their declarations.
4*1858f998SYi Kong *
5*1858f998SYi Kong * Modified by T. H. Do, 4/15/98, SGI/CRAY Research.
6*1858f998SYi Kong */
7*1858f998SYi Kong #include <stdlib.h>
8*1858f998SYi Kong #include "cblas.h"
9*1858f998SYi Kong #include "cblas_test.h"
10*1858f998SYi Kong #define TEST_COL_MJR 0
11*1858f998SYi Kong #define TEST_ROW_MJR 1
12*1858f998SYi Kong #define UNDEFINED -1
13*1858f998SYi Kong
F77_zgemm(int * order,char * transpa,char * transpb,int * m,int * n,int * k,CBLAS_TEST_ZOMPLEX * alpha,CBLAS_TEST_ZOMPLEX * a,int * lda,CBLAS_TEST_ZOMPLEX * b,int * ldb,CBLAS_TEST_ZOMPLEX * beta,CBLAS_TEST_ZOMPLEX * c,int * ldc)14*1858f998SYi Kong void F77_zgemm(int *order, char *transpa, char *transpb, int *m, int *n,
15*1858f998SYi Kong int *k, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
16*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta,
17*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
18*1858f998SYi Kong
19*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *A, *B, *C;
20*1858f998SYi Kong int i,j,LDA, LDB, LDC;
21*1858f998SYi Kong enum CBLAS_TRANSPOSE transa, transb;
22*1858f998SYi Kong
23*1858f998SYi Kong get_transpose_type(transpa, &transa);
24*1858f998SYi Kong get_transpose_type(transpb, &transb);
25*1858f998SYi Kong
26*1858f998SYi Kong if (*order == TEST_ROW_MJR) {
27*1858f998SYi Kong if (transa == CblasNoTrans) {
28*1858f998SYi Kong LDA = *k+1;
29*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX*)malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
30*1858f998SYi Kong for( i=0; i<*m; i++ )
31*1858f998SYi Kong for( j=0; j<*k; j++ ) {
32*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
33*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
34*1858f998SYi Kong }
35*1858f998SYi Kong }
36*1858f998SYi Kong else {
37*1858f998SYi Kong LDA = *m+1;
38*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX));
39*1858f998SYi Kong for( i=0; i<*k; i++ )
40*1858f998SYi Kong for( j=0; j<*m; j++ ) {
41*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
42*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
43*1858f998SYi Kong }
44*1858f998SYi Kong }
45*1858f998SYi Kong
46*1858f998SYi Kong if (transb == CblasNoTrans) {
47*1858f998SYi Kong LDB = *n+1;
48*1858f998SYi Kong B=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDB*sizeof(CBLAS_TEST_ZOMPLEX) );
49*1858f998SYi Kong for( i=0; i<*k; i++ )
50*1858f998SYi Kong for( j=0; j<*n; j++ ) {
51*1858f998SYi Kong B[i*LDB+j].real=b[j*(*ldb)+i].real;
52*1858f998SYi Kong B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
53*1858f998SYi Kong }
54*1858f998SYi Kong }
55*1858f998SYi Kong else {
56*1858f998SYi Kong LDB = *k+1;
57*1858f998SYi Kong B=(CBLAS_TEST_ZOMPLEX* )malloc(LDB*(*n)*sizeof(CBLAS_TEST_ZOMPLEX));
58*1858f998SYi Kong for( i=0; i<*n; i++ )
59*1858f998SYi Kong for( j=0; j<*k; j++ ) {
60*1858f998SYi Kong B[i*LDB+j].real=b[j*(*ldb)+i].real;
61*1858f998SYi Kong B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
62*1858f998SYi Kong }
63*1858f998SYi Kong }
64*1858f998SYi Kong
65*1858f998SYi Kong LDC = *n+1;
66*1858f998SYi Kong C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX));
67*1858f998SYi Kong for( j=0; j<*n; j++ )
68*1858f998SYi Kong for( i=0; i<*m; i++ ) {
69*1858f998SYi Kong C[i*LDC+j].real=c[j*(*ldc)+i].real;
70*1858f998SYi Kong C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
71*1858f998SYi Kong }
72*1858f998SYi Kong cblas_zgemm( CblasRowMajor, transa, transb, *m, *n, *k, alpha, A, LDA,
73*1858f998SYi Kong B, LDB, beta, C, LDC );
74*1858f998SYi Kong for( j=0; j<*n; j++ )
75*1858f998SYi Kong for( i=0; i<*m; i++ ) {
76*1858f998SYi Kong c[j*(*ldc)+i].real=C[i*LDC+j].real;
77*1858f998SYi Kong c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
78*1858f998SYi Kong }
79*1858f998SYi Kong free(A);
80*1858f998SYi Kong free(B);
81*1858f998SYi Kong free(C);
82*1858f998SYi Kong }
83*1858f998SYi Kong else if (*order == TEST_COL_MJR)
84*1858f998SYi Kong cblas_zgemm( CblasColMajor, transa, transb, *m, *n, *k, alpha, a, *lda,
85*1858f998SYi Kong b, *ldb, beta, c, *ldc );
86*1858f998SYi Kong else
87*1858f998SYi Kong cblas_zgemm( UNDEFINED, transa, transb, *m, *n, *k, alpha, a, *lda,
88*1858f998SYi Kong b, *ldb, beta, c, *ldc );
89*1858f998SYi Kong }
F77_zhemm(int * order,char * rtlf,char * uplow,int * m,int * n,CBLAS_TEST_ZOMPLEX * alpha,CBLAS_TEST_ZOMPLEX * a,int * lda,CBLAS_TEST_ZOMPLEX * b,int * ldb,CBLAS_TEST_ZOMPLEX * beta,CBLAS_TEST_ZOMPLEX * c,int * ldc)90*1858f998SYi Kong void F77_zhemm(int *order, char *rtlf, char *uplow, int *m, int *n,
91*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
92*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta,
93*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
94*1858f998SYi Kong
95*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *A, *B, *C;
96*1858f998SYi Kong int i,j,LDA, LDB, LDC;
97*1858f998SYi Kong enum CBLAS_UPLO uplo;
98*1858f998SYi Kong enum CBLAS_SIDE side;
99*1858f998SYi Kong
100*1858f998SYi Kong get_uplo_type(uplow,&uplo);
101*1858f998SYi Kong get_side_type(rtlf,&side);
102*1858f998SYi Kong
103*1858f998SYi Kong if (*order == TEST_ROW_MJR) {
104*1858f998SYi Kong if (side == CblasLeft) {
105*1858f998SYi Kong LDA = *m+1;
106*1858f998SYi Kong A= (CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
107*1858f998SYi Kong for( i=0; i<*m; i++ )
108*1858f998SYi Kong for( j=0; j<*m; j++ ) {
109*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
110*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
111*1858f998SYi Kong }
112*1858f998SYi Kong }
113*1858f998SYi Kong else{
114*1858f998SYi Kong LDA = *n+1;
115*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
116*1858f998SYi Kong for( i=0; i<*n; i++ )
117*1858f998SYi Kong for( j=0; j<*n; j++ ) {
118*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
119*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
120*1858f998SYi Kong }
121*1858f998SYi Kong }
122*1858f998SYi Kong LDB = *n+1;
123*1858f998SYi Kong B=(CBLAS_TEST_ZOMPLEX* )malloc( (*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX ) );
124*1858f998SYi Kong for( i=0; i<*m; i++ )
125*1858f998SYi Kong for( j=0; j<*n; j++ ) {
126*1858f998SYi Kong B[i*LDB+j].real=b[j*(*ldb)+i].real;
127*1858f998SYi Kong B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
128*1858f998SYi Kong }
129*1858f998SYi Kong LDC = *n+1;
130*1858f998SYi Kong C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
131*1858f998SYi Kong for( j=0; j<*n; j++ )
132*1858f998SYi Kong for( i=0; i<*m; i++ ) {
133*1858f998SYi Kong C[i*LDC+j].real=c[j*(*ldc)+i].real;
134*1858f998SYi Kong C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
135*1858f998SYi Kong }
136*1858f998SYi Kong cblas_zhemm( CblasRowMajor, side, uplo, *m, *n, alpha, A, LDA, B, LDB,
137*1858f998SYi Kong beta, C, LDC );
138*1858f998SYi Kong for( j=0; j<*n; j++ )
139*1858f998SYi Kong for( i=0; i<*m; i++ ) {
140*1858f998SYi Kong c[j*(*ldc)+i].real=C[i*LDC+j].real;
141*1858f998SYi Kong c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
142*1858f998SYi Kong }
143*1858f998SYi Kong free(A);
144*1858f998SYi Kong free(B);
145*1858f998SYi Kong free(C);
146*1858f998SYi Kong }
147*1858f998SYi Kong else if (*order == TEST_COL_MJR)
148*1858f998SYi Kong cblas_zhemm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
149*1858f998SYi Kong beta, c, *ldc );
150*1858f998SYi Kong else
151*1858f998SYi Kong cblas_zhemm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
152*1858f998SYi Kong beta, c, *ldc );
153*1858f998SYi Kong }
F77_zsymm(int * order,char * rtlf,char * uplow,int * m,int * n,CBLAS_TEST_ZOMPLEX * alpha,CBLAS_TEST_ZOMPLEX * a,int * lda,CBLAS_TEST_ZOMPLEX * b,int * ldb,CBLAS_TEST_ZOMPLEX * beta,CBLAS_TEST_ZOMPLEX * c,int * ldc)154*1858f998SYi Kong void F77_zsymm(int *order, char *rtlf, char *uplow, int *m, int *n,
155*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
156*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta,
157*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
158*1858f998SYi Kong
159*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *A, *B, *C;
160*1858f998SYi Kong int i,j,LDA, LDB, LDC;
161*1858f998SYi Kong enum CBLAS_UPLO uplo;
162*1858f998SYi Kong enum CBLAS_SIDE side;
163*1858f998SYi Kong
164*1858f998SYi Kong get_uplo_type(uplow,&uplo);
165*1858f998SYi Kong get_side_type(rtlf,&side);
166*1858f998SYi Kong
167*1858f998SYi Kong if (*order == TEST_ROW_MJR) {
168*1858f998SYi Kong if (side == CblasLeft) {
169*1858f998SYi Kong LDA = *m+1;
170*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
171*1858f998SYi Kong for( i=0; i<*m; i++ )
172*1858f998SYi Kong for( j=0; j<*m; j++ )
173*1858f998SYi Kong A[i*LDA+j]=a[j*(*lda)+i];
174*1858f998SYi Kong }
175*1858f998SYi Kong else{
176*1858f998SYi Kong LDA = *n+1;
177*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
178*1858f998SYi Kong for( i=0; i<*n; i++ )
179*1858f998SYi Kong for( j=0; j<*n; j++ )
180*1858f998SYi Kong A[i*LDA+j]=a[j*(*lda)+i];
181*1858f998SYi Kong }
182*1858f998SYi Kong LDB = *n+1;
183*1858f998SYi Kong B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX ));
184*1858f998SYi Kong for( i=0; i<*m; i++ )
185*1858f998SYi Kong for( j=0; j<*n; j++ )
186*1858f998SYi Kong B[i*LDB+j]=b[j*(*ldb)+i];
187*1858f998SYi Kong LDC = *n+1;
188*1858f998SYi Kong C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX));
189*1858f998SYi Kong for( j=0; j<*n; j++ )
190*1858f998SYi Kong for( i=0; i<*m; i++ )
191*1858f998SYi Kong C[i*LDC+j]=c[j*(*ldc)+i];
192*1858f998SYi Kong cblas_zsymm( CblasRowMajor, side, uplo, *m, *n, alpha, A, LDA, B, LDB,
193*1858f998SYi Kong beta, C, LDC );
194*1858f998SYi Kong for( j=0; j<*n; j++ )
195*1858f998SYi Kong for( i=0; i<*m; i++ )
196*1858f998SYi Kong c[j*(*ldc)+i]=C[i*LDC+j];
197*1858f998SYi Kong free(A);
198*1858f998SYi Kong free(B);
199*1858f998SYi Kong free(C);
200*1858f998SYi Kong }
201*1858f998SYi Kong else if (*order == TEST_COL_MJR)
202*1858f998SYi Kong cblas_zsymm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
203*1858f998SYi Kong beta, c, *ldc );
204*1858f998SYi Kong else
205*1858f998SYi Kong cblas_zsymm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
206*1858f998SYi Kong beta, c, *ldc );
207*1858f998SYi Kong }
208*1858f998SYi Kong
F77_zherk(int * order,char * uplow,char * transp,int * n,int * k,double * alpha,CBLAS_TEST_ZOMPLEX * a,int * lda,double * beta,CBLAS_TEST_ZOMPLEX * c,int * ldc)209*1858f998SYi Kong void F77_zherk(int *order, char *uplow, char *transp, int *n, int *k,
210*1858f998SYi Kong double *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
211*1858f998SYi Kong double *beta, CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
212*1858f998SYi Kong
213*1858f998SYi Kong int i,j,LDA,LDC;
214*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *A, *C;
215*1858f998SYi Kong enum CBLAS_UPLO uplo;
216*1858f998SYi Kong enum CBLAS_TRANSPOSE trans;
217*1858f998SYi Kong
218*1858f998SYi Kong get_uplo_type(uplow,&uplo);
219*1858f998SYi Kong get_transpose_type(transp,&trans);
220*1858f998SYi Kong
221*1858f998SYi Kong if (*order == TEST_ROW_MJR) {
222*1858f998SYi Kong if (trans == CblasNoTrans) {
223*1858f998SYi Kong LDA = *k+1;
224*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
225*1858f998SYi Kong for( i=0; i<*n; i++ )
226*1858f998SYi Kong for( j=0; j<*k; j++ ) {
227*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
228*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
229*1858f998SYi Kong }
230*1858f998SYi Kong }
231*1858f998SYi Kong else{
232*1858f998SYi Kong LDA = *n+1;
233*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
234*1858f998SYi Kong for( i=0; i<*k; i++ )
235*1858f998SYi Kong for( j=0; j<*n; j++ ) {
236*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
237*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
238*1858f998SYi Kong }
239*1858f998SYi Kong }
240*1858f998SYi Kong LDC = *n+1;
241*1858f998SYi Kong C=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
242*1858f998SYi Kong for( i=0; i<*n; i++ )
243*1858f998SYi Kong for( j=0; j<*n; j++ ) {
244*1858f998SYi Kong C[i*LDC+j].real=c[j*(*ldc)+i].real;
245*1858f998SYi Kong C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
246*1858f998SYi Kong }
247*1858f998SYi Kong cblas_zherk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta,
248*1858f998SYi Kong C, LDC );
249*1858f998SYi Kong for( j=0; j<*n; j++ )
250*1858f998SYi Kong for( i=0; i<*n; i++ ) {
251*1858f998SYi Kong c[j*(*ldc)+i].real=C[i*LDC+j].real;
252*1858f998SYi Kong c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
253*1858f998SYi Kong }
254*1858f998SYi Kong free(A);
255*1858f998SYi Kong free(C);
256*1858f998SYi Kong }
257*1858f998SYi Kong else if (*order == TEST_COL_MJR)
258*1858f998SYi Kong cblas_zherk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
259*1858f998SYi Kong c, *ldc );
260*1858f998SYi Kong else
261*1858f998SYi Kong cblas_zherk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
262*1858f998SYi Kong c, *ldc );
263*1858f998SYi Kong }
264*1858f998SYi Kong
F77_zsyrk(int * order,char * uplow,char * transp,int * n,int * k,CBLAS_TEST_ZOMPLEX * alpha,CBLAS_TEST_ZOMPLEX * a,int * lda,CBLAS_TEST_ZOMPLEX * beta,CBLAS_TEST_ZOMPLEX * c,int * ldc)265*1858f998SYi Kong void F77_zsyrk(int *order, char *uplow, char *transp, int *n, int *k,
266*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
267*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *beta, CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
268*1858f998SYi Kong
269*1858f998SYi Kong int i,j,LDA,LDC;
270*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *A, *C;
271*1858f998SYi Kong enum CBLAS_UPLO uplo;
272*1858f998SYi Kong enum CBLAS_TRANSPOSE trans;
273*1858f998SYi Kong
274*1858f998SYi Kong get_uplo_type(uplow,&uplo);
275*1858f998SYi Kong get_transpose_type(transp,&trans);
276*1858f998SYi Kong
277*1858f998SYi Kong if (*order == TEST_ROW_MJR) {
278*1858f998SYi Kong if (trans == CblasNoTrans) {
279*1858f998SYi Kong LDA = *k+1;
280*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
281*1858f998SYi Kong for( i=0; i<*n; i++ )
282*1858f998SYi Kong for( j=0; j<*k; j++ ) {
283*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
284*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
285*1858f998SYi Kong }
286*1858f998SYi Kong }
287*1858f998SYi Kong else{
288*1858f998SYi Kong LDA = *n+1;
289*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
290*1858f998SYi Kong for( i=0; i<*k; i++ )
291*1858f998SYi Kong for( j=0; j<*n; j++ ) {
292*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
293*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
294*1858f998SYi Kong }
295*1858f998SYi Kong }
296*1858f998SYi Kong LDC = *n+1;
297*1858f998SYi Kong C=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
298*1858f998SYi Kong for( i=0; i<*n; i++ )
299*1858f998SYi Kong for( j=0; j<*n; j++ ) {
300*1858f998SYi Kong C[i*LDC+j].real=c[j*(*ldc)+i].real;
301*1858f998SYi Kong C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
302*1858f998SYi Kong }
303*1858f998SYi Kong cblas_zsyrk(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA, beta,
304*1858f998SYi Kong C, LDC );
305*1858f998SYi Kong for( j=0; j<*n; j++ )
306*1858f998SYi Kong for( i=0; i<*n; i++ ) {
307*1858f998SYi Kong c[j*(*ldc)+i].real=C[i*LDC+j].real;
308*1858f998SYi Kong c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
309*1858f998SYi Kong }
310*1858f998SYi Kong free(A);
311*1858f998SYi Kong free(C);
312*1858f998SYi Kong }
313*1858f998SYi Kong else if (*order == TEST_COL_MJR)
314*1858f998SYi Kong cblas_zsyrk(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, beta,
315*1858f998SYi Kong c, *ldc );
316*1858f998SYi Kong else
317*1858f998SYi Kong cblas_zsyrk(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, beta,
318*1858f998SYi Kong c, *ldc );
319*1858f998SYi Kong }
F77_zher2k(int * order,char * uplow,char * transp,int * n,int * k,CBLAS_TEST_ZOMPLEX * alpha,CBLAS_TEST_ZOMPLEX * a,int * lda,CBLAS_TEST_ZOMPLEX * b,int * ldb,double * beta,CBLAS_TEST_ZOMPLEX * c,int * ldc)320*1858f998SYi Kong void F77_zher2k(int *order, char *uplow, char *transp, int *n, int *k,
321*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
322*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *b, int *ldb, double *beta,
323*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
324*1858f998SYi Kong int i,j,LDA,LDB,LDC;
325*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *A, *B, *C;
326*1858f998SYi Kong enum CBLAS_UPLO uplo;
327*1858f998SYi Kong enum CBLAS_TRANSPOSE trans;
328*1858f998SYi Kong
329*1858f998SYi Kong get_uplo_type(uplow,&uplo);
330*1858f998SYi Kong get_transpose_type(transp,&trans);
331*1858f998SYi Kong
332*1858f998SYi Kong if (*order == TEST_ROW_MJR) {
333*1858f998SYi Kong if (trans == CblasNoTrans) {
334*1858f998SYi Kong LDA = *k+1;
335*1858f998SYi Kong LDB = *k+1;
336*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ));
337*1858f998SYi Kong B=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_ZOMPLEX ));
338*1858f998SYi Kong for( i=0; i<*n; i++ )
339*1858f998SYi Kong for( j=0; j<*k; j++ ) {
340*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
341*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
342*1858f998SYi Kong B[i*LDB+j].real=b[j*(*ldb)+i].real;
343*1858f998SYi Kong B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
344*1858f998SYi Kong }
345*1858f998SYi Kong }
346*1858f998SYi Kong else {
347*1858f998SYi Kong LDA = *n+1;
348*1858f998SYi Kong LDB = *n+1;
349*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc( LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX ) );
350*1858f998SYi Kong B=(CBLAS_TEST_ZOMPLEX* )malloc( LDB*(*k)*sizeof(CBLAS_TEST_ZOMPLEX ) );
351*1858f998SYi Kong for( i=0; i<*k; i++ )
352*1858f998SYi Kong for( j=0; j<*n; j++ ){
353*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
354*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
355*1858f998SYi Kong B[i*LDB+j].real=b[j*(*ldb)+i].real;
356*1858f998SYi Kong B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
357*1858f998SYi Kong }
358*1858f998SYi Kong }
359*1858f998SYi Kong LDC = *n+1;
360*1858f998SYi Kong C=(CBLAS_TEST_ZOMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) );
361*1858f998SYi Kong for( i=0; i<*n; i++ )
362*1858f998SYi Kong for( j=0; j<*n; j++ ) {
363*1858f998SYi Kong C[i*LDC+j].real=c[j*(*ldc)+i].real;
364*1858f998SYi Kong C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
365*1858f998SYi Kong }
366*1858f998SYi Kong cblas_zher2k(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA,
367*1858f998SYi Kong B, LDB, *beta, C, LDC );
368*1858f998SYi Kong for( j=0; j<*n; j++ )
369*1858f998SYi Kong for( i=0; i<*n; i++ ) {
370*1858f998SYi Kong c[j*(*ldc)+i].real=C[i*LDC+j].real;
371*1858f998SYi Kong c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
372*1858f998SYi Kong }
373*1858f998SYi Kong free(A);
374*1858f998SYi Kong free(B);
375*1858f998SYi Kong free(C);
376*1858f998SYi Kong }
377*1858f998SYi Kong else if (*order == TEST_COL_MJR)
378*1858f998SYi Kong cblas_zher2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda,
379*1858f998SYi Kong b, *ldb, *beta, c, *ldc );
380*1858f998SYi Kong else
381*1858f998SYi Kong cblas_zher2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda,
382*1858f998SYi Kong b, *ldb, *beta, c, *ldc );
383*1858f998SYi Kong }
F77_zsyr2k(int * order,char * uplow,char * transp,int * n,int * k,CBLAS_TEST_ZOMPLEX * alpha,CBLAS_TEST_ZOMPLEX * a,int * lda,CBLAS_TEST_ZOMPLEX * b,int * ldb,CBLAS_TEST_ZOMPLEX * beta,CBLAS_TEST_ZOMPLEX * c,int * ldc)384*1858f998SYi Kong void F77_zsyr2k(int *order, char *uplow, char *transp, int *n, int *k,
385*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda,
386*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta,
387*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *c, int *ldc ) {
388*1858f998SYi Kong int i,j,LDA,LDB,LDC;
389*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *A, *B, *C;
390*1858f998SYi Kong enum CBLAS_UPLO uplo;
391*1858f998SYi Kong enum CBLAS_TRANSPOSE trans;
392*1858f998SYi Kong
393*1858f998SYi Kong get_uplo_type(uplow,&uplo);
394*1858f998SYi Kong get_transpose_type(transp,&trans);
395*1858f998SYi Kong
396*1858f998SYi Kong if (*order == TEST_ROW_MJR) {
397*1858f998SYi Kong if (trans == CblasNoTrans) {
398*1858f998SYi Kong LDA = *k+1;
399*1858f998SYi Kong LDB = *k+1;
400*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
401*1858f998SYi Kong B=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_ZOMPLEX));
402*1858f998SYi Kong for( i=0; i<*n; i++ )
403*1858f998SYi Kong for( j=0; j<*k; j++ ) {
404*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
405*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
406*1858f998SYi Kong B[i*LDB+j].real=b[j*(*ldb)+i].real;
407*1858f998SYi Kong B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
408*1858f998SYi Kong }
409*1858f998SYi Kong }
410*1858f998SYi Kong else {
411*1858f998SYi Kong LDA = *n+1;
412*1858f998SYi Kong LDB = *n+1;
413*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX));
414*1858f998SYi Kong B=(CBLAS_TEST_ZOMPLEX* )malloc(LDB*(*k)*sizeof(CBLAS_TEST_ZOMPLEX));
415*1858f998SYi Kong for( i=0; i<*k; i++ )
416*1858f998SYi Kong for( j=0; j<*n; j++ ){
417*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
418*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
419*1858f998SYi Kong B[i*LDB+j].real=b[j*(*ldb)+i].real;
420*1858f998SYi Kong B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
421*1858f998SYi Kong }
422*1858f998SYi Kong }
423*1858f998SYi Kong LDC = *n+1;
424*1858f998SYi Kong C=(CBLAS_TEST_ZOMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX));
425*1858f998SYi Kong for( i=0; i<*n; i++ )
426*1858f998SYi Kong for( j=0; j<*n; j++ ) {
427*1858f998SYi Kong C[i*LDC+j].real=c[j*(*ldc)+i].real;
428*1858f998SYi Kong C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
429*1858f998SYi Kong }
430*1858f998SYi Kong cblas_zsyr2k(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA,
431*1858f998SYi Kong B, LDB, beta, C, LDC );
432*1858f998SYi Kong for( j=0; j<*n; j++ )
433*1858f998SYi Kong for( i=0; i<*n; i++ ) {
434*1858f998SYi Kong c[j*(*ldc)+i].real=C[i*LDC+j].real;
435*1858f998SYi Kong c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
436*1858f998SYi Kong }
437*1858f998SYi Kong free(A);
438*1858f998SYi Kong free(B);
439*1858f998SYi Kong free(C);
440*1858f998SYi Kong }
441*1858f998SYi Kong else if (*order == TEST_COL_MJR)
442*1858f998SYi Kong cblas_zsyr2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda,
443*1858f998SYi Kong b, *ldb, beta, c, *ldc );
444*1858f998SYi Kong else
445*1858f998SYi Kong cblas_zsyr2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda,
446*1858f998SYi Kong b, *ldb, beta, c, *ldc );
447*1858f998SYi Kong }
F77_ztrmm(int * order,char * rtlf,char * uplow,char * transp,char * diagn,int * m,int * n,CBLAS_TEST_ZOMPLEX * alpha,CBLAS_TEST_ZOMPLEX * a,int * lda,CBLAS_TEST_ZOMPLEX * b,int * ldb)448*1858f998SYi Kong void F77_ztrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
449*1858f998SYi Kong int *m, int *n, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a,
450*1858f998SYi Kong int *lda, CBLAS_TEST_ZOMPLEX *b, int *ldb) {
451*1858f998SYi Kong int i,j,LDA,LDB;
452*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *A, *B;
453*1858f998SYi Kong enum CBLAS_SIDE side;
454*1858f998SYi Kong enum CBLAS_DIAG diag;
455*1858f998SYi Kong enum CBLAS_UPLO uplo;
456*1858f998SYi Kong enum CBLAS_TRANSPOSE trans;
457*1858f998SYi Kong
458*1858f998SYi Kong get_uplo_type(uplow,&uplo);
459*1858f998SYi Kong get_transpose_type(transp,&trans);
460*1858f998SYi Kong get_diag_type(diagn,&diag);
461*1858f998SYi Kong get_side_type(rtlf,&side);
462*1858f998SYi Kong
463*1858f998SYi Kong if (*order == TEST_ROW_MJR) {
464*1858f998SYi Kong if (side == CblasLeft) {
465*1858f998SYi Kong LDA = *m+1;
466*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
467*1858f998SYi Kong for( i=0; i<*m; i++ )
468*1858f998SYi Kong for( j=0; j<*m; j++ ) {
469*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
470*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
471*1858f998SYi Kong }
472*1858f998SYi Kong }
473*1858f998SYi Kong else{
474*1858f998SYi Kong LDA = *n+1;
475*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
476*1858f998SYi Kong for( i=0; i<*n; i++ )
477*1858f998SYi Kong for( j=0; j<*n; j++ ) {
478*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
479*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
480*1858f998SYi Kong }
481*1858f998SYi Kong }
482*1858f998SYi Kong LDB = *n+1;
483*1858f998SYi Kong B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX));
484*1858f998SYi Kong for( i=0; i<*m; i++ )
485*1858f998SYi Kong for( j=0; j<*n; j++ ) {
486*1858f998SYi Kong B[i*LDB+j].real=b[j*(*ldb)+i].real;
487*1858f998SYi Kong B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
488*1858f998SYi Kong }
489*1858f998SYi Kong cblas_ztrmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, alpha,
490*1858f998SYi Kong A, LDA, B, LDB );
491*1858f998SYi Kong for( j=0; j<*n; j++ )
492*1858f998SYi Kong for( i=0; i<*m; i++ ) {
493*1858f998SYi Kong b[j*(*ldb)+i].real=B[i*LDB+j].real;
494*1858f998SYi Kong b[j*(*ldb)+i].imag=B[i*LDB+j].imag;
495*1858f998SYi Kong }
496*1858f998SYi Kong free(A);
497*1858f998SYi Kong free(B);
498*1858f998SYi Kong }
499*1858f998SYi Kong else if (*order == TEST_COL_MJR)
500*1858f998SYi Kong cblas_ztrmm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha,
501*1858f998SYi Kong a, *lda, b, *ldb);
502*1858f998SYi Kong else
503*1858f998SYi Kong cblas_ztrmm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha,
504*1858f998SYi Kong a, *lda, b, *ldb);
505*1858f998SYi Kong }
506*1858f998SYi Kong
F77_ztrsm(int * order,char * rtlf,char * uplow,char * transp,char * diagn,int * m,int * n,CBLAS_TEST_ZOMPLEX * alpha,CBLAS_TEST_ZOMPLEX * a,int * lda,CBLAS_TEST_ZOMPLEX * b,int * ldb)507*1858f998SYi Kong void F77_ztrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
508*1858f998SYi Kong int *m, int *n, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a,
509*1858f998SYi Kong int *lda, CBLAS_TEST_ZOMPLEX *b, int *ldb) {
510*1858f998SYi Kong int i,j,LDA,LDB;
511*1858f998SYi Kong CBLAS_TEST_ZOMPLEX *A, *B;
512*1858f998SYi Kong enum CBLAS_SIDE side;
513*1858f998SYi Kong enum CBLAS_DIAG diag;
514*1858f998SYi Kong enum CBLAS_UPLO uplo;
515*1858f998SYi Kong enum CBLAS_TRANSPOSE trans;
516*1858f998SYi Kong
517*1858f998SYi Kong get_uplo_type(uplow,&uplo);
518*1858f998SYi Kong get_transpose_type(transp,&trans);
519*1858f998SYi Kong get_diag_type(diagn,&diag);
520*1858f998SYi Kong get_side_type(rtlf,&side);
521*1858f998SYi Kong
522*1858f998SYi Kong if (*order == TEST_ROW_MJR) {
523*1858f998SYi Kong if (side == CblasLeft) {
524*1858f998SYi Kong LDA = *m+1;
525*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc( (*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) );
526*1858f998SYi Kong for( i=0; i<*m; i++ )
527*1858f998SYi Kong for( j=0; j<*m; j++ ) {
528*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
529*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
530*1858f998SYi Kong }
531*1858f998SYi Kong }
532*1858f998SYi Kong else{
533*1858f998SYi Kong LDA = *n+1;
534*1858f998SYi Kong A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX));
535*1858f998SYi Kong for( i=0; i<*n; i++ )
536*1858f998SYi Kong for( j=0; j<*n; j++ ) {
537*1858f998SYi Kong A[i*LDA+j].real=a[j*(*lda)+i].real;
538*1858f998SYi Kong A[i*LDA+j].imag=a[j*(*lda)+i].imag;
539*1858f998SYi Kong }
540*1858f998SYi Kong }
541*1858f998SYi Kong LDB = *n+1;
542*1858f998SYi Kong B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX));
543*1858f998SYi Kong for( i=0; i<*m; i++ )
544*1858f998SYi Kong for( j=0; j<*n; j++ ) {
545*1858f998SYi Kong B[i*LDB+j].real=b[j*(*ldb)+i].real;
546*1858f998SYi Kong B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
547*1858f998SYi Kong }
548*1858f998SYi Kong cblas_ztrsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, alpha,
549*1858f998SYi Kong A, LDA, B, LDB );
550*1858f998SYi Kong for( j=0; j<*n; j++ )
551*1858f998SYi Kong for( i=0; i<*m; i++ ) {
552*1858f998SYi Kong b[j*(*ldb)+i].real=B[i*LDB+j].real;
553*1858f998SYi Kong b[j*(*ldb)+i].imag=B[i*LDB+j].imag;
554*1858f998SYi Kong }
555*1858f998SYi Kong free(A);
556*1858f998SYi Kong free(B);
557*1858f998SYi Kong }
558*1858f998SYi Kong else if (*order == TEST_COL_MJR)
559*1858f998SYi Kong cblas_ztrsm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha,
560*1858f998SYi Kong a, *lda, b, *ldb);
561*1858f998SYi Kong else
562*1858f998SYi Kong cblas_ztrsm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha,
563*1858f998SYi Kong a, *lda, b, *ldb);
564*1858f998SYi Kong }
565