001: /* ///////////////////////////// P /// L /// A /// S /// M /// A /////////////////////////////// */
002: /* ///                    PLASMA auxiliary routines (version 2.1.0)                          ///
003:  * ///                    Author: Jakub Kurzak, Hatem Ltaief                                 ///
004:  * ///                    Release Date: November, 15th 2009                                  ///
005:  * ///                    PLASMA is a software package provided by Univ. of Tennessee,       ///
006:  * ///                    Univ. of California Berkeley and Univ. of Colorado Denver          /// */
007: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
008: #include "common.h"
009: #include "core_blas.h"
010: #include "lapack.h"
011: 
012: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
013: void CORE_zgelqt(int M, int N, int IB,
014:                  PLASMA_Complex64_t *A, int LDA,
015:                  PLASMA_Complex64_t *T, int LDT,
016:                  PLASMA_Complex64_t *TAU, PLASMA_Complex64_t *WORK)
017: {
018:     int INFO;
019: 
020:     core_zgelqt(
021:         &M, &N, &IB,
022:         A, &LDA,
023:         T, &LDT,
024:         TAU, WORK, &INFO);
025: }
026: 
027: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
028: void CORE_zgemm(int transA, int transB,
029:                 int M, int N, int K,
030:                 PLASMA_Complex64_t alpha, PLASMA_Complex64_t *A, int LDA,
031:                 PLASMA_Complex64_t *B, int LDB,
032:                 PLASMA_Complex64_t beta, PLASMA_Complex64_t *C, int LDC)
033: {
034:     cblas_zgemm(
035:         CblasColMajor,
036:         (CBLAS_TRANSPOSE)transA, (CBLAS_TRANSPOSE)transB,
037:         M, N, K,
038:         CBLAS_SADDR(alpha), A, LDA,
039:         B, LDB,
040:         CBLAS_SADDR(beta), C, LDC);
041: }
042: 
043: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
044: void CORE_zgeqrt(int M, int N, int IB,
045:                  PLASMA_Complex64_t *A, int LDA,
046:                  PLASMA_Complex64_t *T, int LDT,
047:                  PLASMA_Complex64_t *TAU, PLASMA_Complex64_t *WORK)
048: {
049:     int INFO;
050: 
051:     core_zgeqrt(
052:         &M, &N, &IB,
053:         A, &LDA,
054:         T, &LDT,
055:         TAU, WORK, &INFO);
056: }
057: 
058: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
059: void CORE_zgessm(int M, int N, int K, int IB,
060:                  int *IPIV,
061:                  PLASMA_Complex64_t *L, int LDL,
062:                  PLASMA_Complex64_t *A, int LDA)
063: {
064:     int INFO;
065: 
066:     core_zgessm(
067:         &M, &N, &K, &IB,
068:         IPIV,
069:         L, &LDL,
070:         A, &LDA,
071:         &INFO);
072: }
073: 
074: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
075: void CORE_zgetrf(int M, int N, int IB,
076:                  PLASMA_Complex64_t *A, int LDA,
077:                  int *IPIV, int *INFO)
078: {
079:     core_zgetrf(
080:         &M, &N, &IB,
081:         A, &LDA,
082:         IPIV, INFO);
083: }
084: 
085: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
086: void CORE_zpotrf(int uplo, int N, PLASMA_Complex64_t *A, int LDA, int *INFO)
087: {
088:     zpotrf(lapack_const(uplo), &N, A, &LDA, INFO);
089: }
090: 
091: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
092: void CORE_zssmlq(int side, int trans,
093:                  int M1, int M2, int NN, int IB, int K,
094:                  PLASMA_Complex64_t *A1, int LDA1,
095:                  PLASMA_Complex64_t *A2, int LDA2,
096:                  PLASMA_Complex64_t *V, int LDV,
097:                  PLASMA_Complex64_t *T, int LDT,
098:                  PLASMA_Complex64_t *WORK, int LDWORK)
099: {
100:     int INFO;
101: 
102:     core_zssmlq(
103:         lapack_const(side), lapack_const(trans),
104:         &M1, &M2, &NN, &IB, &K,
105:         A1, &LDA1,
106:         A2, &LDA2,
107:         V, &LDV,
108:         T, &LDT,
109:         WORK, &LDWORK, &INFO);
110: }
111: 
112: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
113: void CORE_zssmqr(int side, int trans,
114:                  int M1, int M2, int NN, int IB, int K,
115:                  PLASMA_Complex64_t *A1, int LDA1,
116:                  PLASMA_Complex64_t *A2, int LDA2,
117:                  PLASMA_Complex64_t *V, int LDV,
118:                  PLASMA_Complex64_t *T, int LDT,
119:                  PLASMA_Complex64_t *WORK, int LDWORK)
120: {
121:     int INFO;
122: 
123:     core_zssmqr(
124:         lapack_const(side), lapack_const(trans),
125:         &M1, &M2, &NN, &IB, &K,
126:         A1, &LDA1,
127:         A2, &LDA2,
128:         V, &LDV,
129:         T, &LDT,
130:         WORK, &LDWORK, &INFO);
131: }
132: 
133: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
134: void CORE_zssssm(int M1, int M2, int NN, int IB, int K,
135:                  PLASMA_Complex64_t *A1, int LDA1,
136:                  PLASMA_Complex64_t *A2, int LDA2,
137:                  PLASMA_Complex64_t *L1, int LDL1,
138:                  PLASMA_Complex64_t *L2, int LDL2,
139:                  int *IPIV)
140: {
141:     int INFO;
142: 
143:     core_zssssm(
144:         &M1, &M2, &NN, &IB, &K,
145:         A1, &LDA1,
146:         A2, &LDA2,
147:         L1, &LDL1,
148:         L2, &LDL2,
149:         IPIV,
150:         &INFO);
151: }
152: //#IFDEF COMPLEX .OR. COMPLEX_16
153: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
154: void CORE_zherk(int uplo, int trans,
155:                 int N, int K,
156:                 double alpha, PLASMA_Complex64_t *A, int LDA,
157:                 double beta, PLASMA_Complex64_t *C, int LDC)
158: {
159:     cblas_zherk(
160:         CblasColMajor,
161:         (CBLAS_UPLO)uplo, (CBLAS_TRANSPOSE)trans,
162:         N, K,
163:         alpha, A, LDA,
164:         beta, C, LDC);
165: }
166: //#ENDIF
167: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
168: void CORE_zsyrk(int uplo, int trans,
169:                 int N, int K,
170:                 PLASMA_Complex64_t alpha, PLASMA_Complex64_t *A, int LDA,
171:                 PLASMA_Complex64_t beta, PLASMA_Complex64_t *C, int LDC)
172: {
173:     cblas_zsyrk(
174:         CblasColMajor,
175:         (CBLAS_UPLO)uplo, (CBLAS_TRANSPOSE)trans,
176:         N, K,
177:         CBLAS_SADDR(alpha), A, LDA,
178:         CBLAS_SADDR(beta), C, LDC);
179: }
180: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
181: void CORE_ztrsm(int side, int uplo,
182:                 int transA, int diag,
183:                 int M, int N,
184:                 PLASMA_Complex64_t alpha, PLASMA_Complex64_t *A, int LDA,
185:                 PLASMA_Complex64_t *B, int LDB)
186: {
187:     cblas_ztrsm(
188:         CblasColMajor,
189:         (CBLAS_SIDE)side, (CBLAS_UPLO)uplo,
190:         (CBLAS_TRANSPOSE)transA, (CBLAS_DIAG)diag,
191:         M, N,
192:         CBLAS_SADDR(alpha), A, LDA,
193:         B, LDB);
194: }
195: 
196: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
197: void CORE_ztslqt(int M, int N, int IB,
198:                  PLASMA_Complex64_t *A1, int LDA1,
199:                  PLASMA_Complex64_t *A2, int LDA2,
200:                  PLASMA_Complex64_t *T, int LDT,
201:                  PLASMA_Complex64_t *TAU, PLASMA_Complex64_t *WORK)
202: {
203:     int INFO;
204: 
205:     core_ztslqt(
206:         &M, &N, &IB,
207:         A1, &LDA1,
208:         A2, &LDA2,
209:         T, &LDT,
210:         TAU, WORK, &INFO);
211: }
212: 
213: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
214: void CORE_ztsqrt(int M, int N, int IB,
215:                  PLASMA_Complex64_t *A1, int LDA1,
216:                  PLASMA_Complex64_t *A2, int LDA2,
217:                  PLASMA_Complex64_t *T, int LDT,
218:                  PLASMA_Complex64_t *TAU, PLASMA_Complex64_t *WORK)
219: {
220:     int INFO;
221: 
222:     core_ztsqrt(
223:         &M, &N, &IB,
224:         A1, &LDA1,
225:         A2, &LDA2,
226:         T, &LDT,
227:         TAU, WORK, &INFO);
228: }
229: 
230: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
231: void CORE_ztstrf(int M, int N, int IB, int NB,
232:                  PLASMA_Complex64_t *U, int LDU,
233:                  PLASMA_Complex64_t *A, int LDA,
234:                  PLASMA_Complex64_t *L, int LDL,
235:                  int *IPIV, PLASMA_Complex64_t *WORK,
236:                  int LDWORK, int *INFO)
237: {
238:     core_ztstrf(
239:         &M, &N, &IB, &NB,
240:         U, &LDU,
241:         A, &LDA,
242:         L, &LDL,
243:         IPIV,
244:         WORK, &LDWORK, INFO);
245: }
246: 
247: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
248: void CORE_zunmlq(int side, int trans,
249:                  int M, int N, int IB, int K,
250:                  PLASMA_Complex64_t *V, int LDV,
251:                  PLASMA_Complex64_t *T, int LDT,
252:                  PLASMA_Complex64_t *C, int LDC,
253:                  PLASMA_Complex64_t *WORK, int LDWORK)
254: {
255:     int INFO;
256: 
257:     core_zunmlq(
258:         lapack_const(side), lapack_const(trans),
259:         &M, &N, &IB, &K,
260:         V, &LDV,
261:         T, &LDT,
262:         C, &LDC,
263:         WORK, &LDWORK, &INFO);
264: }
265: 
266: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
267: void CORE_zunmqr(int side, int trans,
268:                  int M, int N, int IB, int K,
269:                  PLASMA_Complex64_t *V, int LDV,
270:                  PLASMA_Complex64_t *T, int LDT,
271:                  PLASMA_Complex64_t *C, int LDC,
272:                  PLASMA_Complex64_t *WORK, int LDWORK)
273: {
274:     int INFO;
275: 
276:     core_zunmqr(
277:         lapack_const(side), lapack_const(trans),
278:         &M, &N, &IB, &K,
279:         V, &LDV,
280:         T, &LDT,
281:         C, &LDC,
282:         WORK, &LDWORK, &INFO);
283: }
284: