LAPACK
3.9.0
LAPACK: Linear Algebra PACKage
cblas_zgemv.c
Go to the documentation of this file.
1
/*
2
* cblas_zgemv.c
3
* The program is a C interface of zgemv
4
*
5
* Keita Teranishi 5/20/98
6
*
7
*/
8
#include <stdio.h>
9
#include <stdlib.h>
10
#include "
cblas.h
"
11
#include "
cblas_f77.h
"
12
void
cblas_zgemv
(
const
CBLAS_LAYOUT
layout,
13
const
CBLAS_TRANSPOSE
TransA,
const
int
M,
const
int
N
,
14
const
void
*alpha,
const
void
*A,
const
int
lda,
15
const
void
*X,
const
int
incX,
const
void
*beta,
16
void
*Y,
const
int
incY)
17
{
18
char
TA;
19
#ifdef F77_CHAR
20
F77_CHAR
F77_TA
;
21
#else
22
#define F77_TA &TA
23
#endif
24
#ifdef F77_INT
25
F77_INT
F77_M
=M,
F77_N
=
N
,
F77_lda
=lda,
F77_incX
=incX,
F77_incY
=incY;
26
#else
27
#define F77_M M
28
#define F77_N N
29
#define F77_lda lda
30
#define F77_incX incx
31
#define F77_incY incY
32
#endif
33
34
int
n, i=0, incx=incX;
35
const
double
*xx= (
double
*)X, *alp= (
double
*)alpha, *bet = (
double
*)beta;
36
double
ALPHA[2],BETA[2];
37
int
tincY, tincx;
38
double
*x=(
double
*)X, *y=(
double
*)Y, *st=0, *tx;
39
extern
int
CBLAS_CallFromC
;
40
extern
int
RowMajorStrg
;
41
RowMajorStrg
= 0;
42
43
CBLAS_CallFromC
= 1;
44
45
if
(layout ==
CblasColMajor
)
46
{
47
if
(TransA ==
CblasNoTrans
) TA =
'N'
;
48
else
if
(TransA ==
CblasTrans
) TA =
'T'
;
49
else
if
(TransA ==
CblasConjTrans
) TA =
'C'
;
50
else
51
{
52
cblas_xerbla
(2,
"cblas_zgemv"
,
"Illegal TransA setting, %d\n"
, TransA);
53
CBLAS_CallFromC
= 0;
54
RowMajorStrg
= 0;
55
return
;
56
}
57
#ifdef F77_CHAR
58
F77_TA
= C2F_CHAR(&TA);
59
#endif
60
F77_zgemv
(
F77_TA
, &
F77_M
, &
F77_N
, alpha, A, &
F77_lda
, X, &
F77_incX
,
61
beta, Y, &
F77_incY
);
62
}
63
else
if
(layout ==
CblasRowMajor
)
64
{
65
RowMajorStrg
= 1;
66
67
if
(TransA ==
CblasNoTrans
) TA =
'T'
;
68
else
if
(TransA ==
CblasTrans
) TA =
'N'
;
69
else
if
(TransA ==
CblasConjTrans
)
70
{
71
ALPHA[0]= *alp;
72
ALPHA[1]= -alp[1];
73
BETA[0]= *bet;
74
BETA[1]= -bet[1];
75
TA =
'N'
;
76
if
(M > 0)
77
{
78
n = M << 1;
79
x = malloc(n*
sizeof
(
double
));
80
tx = x;
81
if
( incX > 0 ) {
82
i = incX << 1 ;
83
tincx = 2;
84
st= x+n;
85
}
else
{
86
i = incX *(-2);
87
tincx = -2;
88
st = x-2;
89
x +=(n-2);
90
}
91
92
do
93
{
94
*x = *xx;
95
x[1] = -xx[1];
96
x += tincx ;
97
xx += i;
98
}
99
while
(x != st);
100
x=tx;
101
102
#ifdef F77_INT
103
F77_incX
= 1;
104
#else
105
incx = 1;
106
#endif
107
108
if
(incY > 0)
109
tincY = incY;
110
else
111
tincY = -incY;
112
113
y++;
114
115
if
(
N
> 0)
116
{
117
i = tincY << 1;
118
n = i *
N
;
119
st = y + n;
120
do
{
121
*y = -(*y);
122
y += i;
123
}
while
(y != st);
124
y -= n;
125
}
126
}
127
else
x = (
double
*) X;
128
}
129
else
130
{
131
cblas_xerbla
(2,
"cblas_zgemv"
,
"Illegal TransA setting, %d\n"
, TransA);
132
CBLAS_CallFromC
= 0;
133
RowMajorStrg
= 0;
134
return
;
135
}
136
#ifdef F77_CHAR
137
F77_TA
= C2F_CHAR(&TA);
138
#endif
139
if
(TransA ==
CblasConjTrans
)
140
F77_zgemv
(
F77_TA
, &
F77_N
, &
F77_M
, ALPHA, A, &
F77_lda
, x,
141
&
F77_incX
, BETA, Y, &
F77_incY
);
142
else
143
F77_zgemv
(
F77_TA
, &
F77_N
, &
F77_M
, alpha, A, &
F77_lda
, x,
144
&
F77_incX
, beta, Y, &
F77_incY
);
145
146
if
(TransA ==
CblasConjTrans
)
147
{
148
if
(x != (
double
*)X) free(x);
149
if
(
N
> 0)
150
{
151
do
152
{
153
*y = -(*y);
154
y += i;
155
}
156
while
(y != st);
157
}
158
}
159
}
160
else
cblas_xerbla
(1,
"cblas_zgemv"
,
"Illegal layout setting, %d\n"
, layout);
161
CBLAS_CallFromC
= 0;
162
RowMajorStrg
= 0;
163
return
;
164
}
cblas_f77.h
CBLAS_TRANSPOSE
CBLAS_TRANSPOSE
Definition:
cblas.h:20
cblas_xerbla
void cblas_xerbla(int p, const char *rout, const char *form,...)
Definition:
cblas_xerbla.c:8
F77_zgemv
#define F77_zgemv
Definition:
cblas_f77.h:150
CblasColMajor
Definition:
cblas.h:19
cblas_zgemv
void cblas_zgemv(const CBLAS_LAYOUT layout, const CBLAS_TRANSPOSE TransA, const int M, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY)
Definition:
cblas_zgemv.c:12
CblasTrans
Definition:
cblas.h:20
CBLAS_CallFromC
int CBLAS_CallFromC
Definition:
cblas_globals.c:1
cblas.h
CBLAS_LAYOUT
CBLAS_LAYOUT
Definition:
cblas.h:19
CblasRowMajor
Definition:
cblas.h:19
F77_TA
#define F77_TA
F77_lda
#define F77_lda
RowMajorStrg
int RowMajorStrg
Definition:
cblas_globals.c:2
F77_incY
#define F77_incY
CblasNoTrans
Definition:
cblas.h:20
F77_incX
#define F77_incX
F77_M
#define F77_M
N
#define N
Definition:
example_user.c:10
CblasConjTrans
Definition:
cblas.h:20
F77_N
#define F77_N
CBLAS
src
cblas_zgemv.c
Generated on Wed May 5 2021 15:10:30 for LAPACK by
1.8.16