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_cgelqt(int M, int N, int IB,
014:                  PLASMA_Complex32_t *A, int LDA,
015:                  PLASMA_Complex32_t *T, int LDT,
016:                  PLASMA_Complex32_t *TAU, PLASMA_Complex32_t *WORK)
017: {
018:     int INFO;
019: 
020:     core_cgelqt(
021:         &M, &N, &IB,
022:         A, &LDA,
023:         T, &LDT,
024:         TAU, WORK, &INFO);
025: }
026: 
027: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
028: void CORE_cgemm(int transA, int transB,
029:                 int M, int N, int K,
030:                 PLASMA_Complex32_t alpha, PLASMA_Complex32_t *A, int LDA,
031:                 PLASMA_Complex32_t *B, int LDB,
032:                 PLASMA_Complex32_t beta, PLASMA_Complex32_t *C, int LDC)
033: {
034:     cblas_cgemm(
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_cgeqrt(int M, int N, int IB,
045:                  PLASMA_Complex32_t *A, int LDA,
046:                  PLASMA_Complex32_t *T, int LDT,
047:                  PLASMA_Complex32_t *TAU, PLASMA_Complex32_t *WORK)
048: {
049:     int INFO;
050: 
051:     core_cgeqrt(
052:         &M, &N, &IB,
053:         A, &LDA,
054:         T, &LDT,
055:         TAU, WORK, &INFO);
056: }
057: 
058: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
059: void CORE_cgessm(int M, int N, int K, int IB,
060:                  int *IPIV,
061:                  PLASMA_Complex32_t *L, int LDL,
062:                  PLASMA_Complex32_t *A, int LDA)
063: {
064:     int INFO;
065: 
066:     core_cgessm(
067:         &M, &N, &K, &IB,
068:         IPIV,
069:         L, &LDL,
070:         A, &LDA,
071:         &INFO);
072: }
073: 
074: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
075: void CORE_cgetrf(int M, int N, int IB,
076:                  PLASMA_Complex32_t *A, int LDA,
077:                  int *IPIV, int *INFO)
078: {
079:     core_cgetrf(
080:         &M, &N, &IB,
081:         A, &LDA,
082:         IPIV, INFO);
083: }
084: 
085: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
086: void CORE_cpotrf(int uplo, int N, PLASMA_Complex32_t *A, int LDA, int *INFO)
087: {
088:     cpotrf(lapack_const(uplo), &N, A, &LDA, INFO);
089: }
090: 
091: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
092: void CORE_cssmlq(int side, int trans,
093:                  int M1, int M2, int NN, int IB, int K,
094:                  PLASMA_Complex32_t *A1, int LDA1,
095:                  PLASMA_Complex32_t *A2, int LDA2,
096:                  PLASMA_Complex32_t *V, int LDV,
097:                  PLASMA_Complex32_t *T, int LDT,
098:                  PLASMA_Complex32_t *WORK, int LDWORK)
099: {
100:     int INFO;
101: 
102:     core_cssmlq(
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_cssmqr(int side, int trans,
114:                  int M1, int M2, int NN, int IB, int K,
115:                  PLASMA_Complex32_t *A1, int LDA1,
116:                  PLASMA_Complex32_t *A2, int LDA2,
117:                  PLASMA_Complex32_t *V, int LDV,
118:                  PLASMA_Complex32_t *T, int LDT,
119:                  PLASMA_Complex32_t *WORK, int LDWORK)
120: {
121:     int INFO;
122: 
123:     core_cssmqr(
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_cssssm(int M1, int M2, int NN, int IB, int K,
135:                  PLASMA_Complex32_t *A1, int LDA1,
136:                  PLASMA_Complex32_t *A2, int LDA2,
137:                  PLASMA_Complex32_t *L1, int LDL1,
138:                  PLASMA_Complex32_t *L2, int LDL2,
139:                  int *IPIV)
140: {
141:     int INFO;
142: 
143:     core_cssssm(
144:         &M1, &M2, &NN, &IB, &K,
145:         A1, &LDA1,
146:         A2, &LDA2,
147:         L1, &LDL1,
148:         L2, &LDL2,
149:         IPIV,
150:         &INFO);
151: }
152: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
153: void CORE_cherk(int uplo, int trans,
154:                 int N, int K,
155:                 float alpha, PLASMA_Complex32_t *A, int LDA,
156:                 float beta, PLASMA_Complex32_t *C, int LDC)
157: {
158:     cblas_cherk(
159:         CblasColMajor,
160:         (CBLAS_UPLO)uplo, (CBLAS_TRANSPOSE)trans,
161:         N, K,
162:         alpha, A, LDA,
163:         beta, C, LDC);
164: }
165: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
166: void CORE_csyrk(int uplo, int trans,
167:                 int N, int K,
168:                 PLASMA_Complex32_t alpha, PLASMA_Complex32_t *A, int LDA,
169:                 PLASMA_Complex32_t beta, PLASMA_Complex32_t *C, int LDC)
170: {
171:     cblas_csyrk(
172:         CblasColMajor,
173:         (CBLAS_UPLO)uplo, (CBLAS_TRANSPOSE)trans,
174:         N, K,
175:         CBLAS_SADDR(alpha), A, LDA,
176:         CBLAS_SADDR(beta), C, LDC);
177: }
178: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
179: void CORE_ctrsm(int side, int uplo,
180:                 int transA, int diag,
181:                 int M, int N,
182:                 PLASMA_Complex32_t alpha, PLASMA_Complex32_t *A, int LDA,
183:                 PLASMA_Complex32_t *B, int LDB)
184: {
185:     cblas_ctrsm(
186:         CblasColMajor,
187:         (CBLAS_SIDE)side, (CBLAS_UPLO)uplo,
188:         (CBLAS_TRANSPOSE)transA, (CBLAS_DIAG)diag,
189:         M, N,
190:         CBLAS_SADDR(alpha), A, LDA,
191:         B, LDB);
192: }
193: 
194: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
195: void CORE_ctslqt(int M, int N, int IB,
196:                  PLASMA_Complex32_t *A1, int LDA1,
197:                  PLASMA_Complex32_t *A2, int LDA2,
198:                  PLASMA_Complex32_t *T, int LDT,
199:                  PLASMA_Complex32_t *TAU, PLASMA_Complex32_t *WORK)
200: {
201:     int INFO;
202: 
203:     core_ctslqt(
204:         &M, &N, &IB,
205:         A1, &LDA1,
206:         A2, &LDA2,
207:         T, &LDT,
208:         TAU, WORK, &INFO);
209: }
210: 
211: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
212: void CORE_ctsqrt(int M, int N, int IB,
213:                  PLASMA_Complex32_t *A1, int LDA1,
214:                  PLASMA_Complex32_t *A2, int LDA2,
215:                  PLASMA_Complex32_t *T, int LDT,
216:                  PLASMA_Complex32_t *TAU, PLASMA_Complex32_t *WORK)
217: {
218:     int INFO;
219: 
220:     core_ctsqrt(
221:         &M, &N, &IB,
222:         A1, &LDA1,
223:         A2, &LDA2,
224:         T, &LDT,
225:         TAU, WORK, &INFO);
226: }
227: 
228: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
229: void CORE_ctstrf(int M, int N, int IB, int NB,
230:                  PLASMA_Complex32_t *U, int LDU,
231:                  PLASMA_Complex32_t *A, int LDA,
232:                  PLASMA_Complex32_t *L, int LDL,
233:                  int *IPIV, PLASMA_Complex32_t *WORK,
234:                  int LDWORK, int *INFO)
235: {
236:     core_ctstrf(
237:         &M, &N, &IB, &NB,
238:         U, &LDU,
239:         A, &LDA,
240:         L, &LDL,
241:         IPIV,
242:         WORK, &LDWORK, INFO);
243: }
244: 
245: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
246: void CORE_cunmlq(int side, int trans,
247:                  int M, int N, int IB, int K,
248:                  PLASMA_Complex32_t *V, int LDV,
249:                  PLASMA_Complex32_t *T, int LDT,
250:                  PLASMA_Complex32_t *C, int LDC,
251:                  PLASMA_Complex32_t *WORK, int LDWORK)
252: {
253:     int INFO;
254: 
255:     core_cunmlq(
256:         lapack_const(side), lapack_const(trans),
257:         &M, &N, &IB, &K,
258:         V, &LDV,
259:         T, &LDT,
260:         C, &LDC,
261:         WORK, &LDWORK, &INFO);
262: }
263: 
264: /* ///////////////////////////////////////////////////////////////////////////////////////////// */
265: void CORE_cunmqr(int side, int trans,
266:                  int M, int N, int IB, int K,
267:                  PLASMA_Complex32_t *V, int LDV,
268:                  PLASMA_Complex32_t *T, int LDT,
269:                  PLASMA_Complex32_t *C, int LDC,
270:                  PLASMA_Complex32_t *WORK, int LDWORK)
271: {
272:     int INFO;
273: 
274:     core_cunmqr(
275:         lapack_const(side), lapack_const(trans),
276:         &M, &N, &IB, &K,
277:         V, &LDV,
278:         T, &LDT,
279:         C, &LDC,
280:         WORK, &LDWORK, &INFO);
281: }
282: