1 /*
2 
3     Copyright (C) 2014, The University of Texas at Austin
4 
5     This file is part of libflame and is available under the 3-Clause
6     BSD license, which can be found in the LICENSE file at the top-level
7     directory, or at http://opensource.org/licenses/BSD-3-Clause
8 
9 */
10 
11 #include "FLAME.h"
12 
FLA_Eig_gest_il_opt_var3(FLA_Obj A,FLA_Obj Y,FLA_Obj B)13 FLA_Error FLA_Eig_gest_il_opt_var3( FLA_Obj A, FLA_Obj Y, FLA_Obj B )
14 {
15   FLA_Datatype datatype;
16   int          m_AB;
17   int          rs_A, cs_A;
18   int          rs_Y, cs_Y;
19   int          rs_B, cs_B;
20 
21   datatype = FLA_Obj_datatype( A );
22 
23   m_AB     = FLA_Obj_length( A );
24 
25   rs_A     = FLA_Obj_row_stride( A );
26   cs_A     = FLA_Obj_col_stride( A );
27 
28   rs_Y     = FLA_Obj_row_stride( Y );
29   cs_Y     = FLA_Obj_col_stride( Y );
30 
31   rs_B     = FLA_Obj_row_stride( B );
32   cs_B     = FLA_Obj_col_stride( B );
33 
34   switch ( datatype )
35   {
36     case FLA_FLOAT:
37     {
38       float* buff_A = FLA_FLOAT_PTR( A );
39       float* buff_Y = FLA_FLOAT_PTR( Y );
40       float* buff_B = FLA_FLOAT_PTR( B );
41 
42       FLA_Eig_gest_il_ops_var3( m_AB,
43                                 buff_A, rs_A, cs_A,
44                                 buff_Y, rs_Y, cs_Y,
45                                 buff_B, rs_B, cs_B );
46 
47       break;
48     }
49 
50     case FLA_DOUBLE:
51     {
52       double* buff_A = FLA_DOUBLE_PTR( A );
53       double* buff_Y = FLA_DOUBLE_PTR( Y );
54       double* buff_B = FLA_DOUBLE_PTR( B );
55 
56       FLA_Eig_gest_il_opd_var3( m_AB,
57                                 buff_A, rs_A, cs_A,
58                                 buff_Y, rs_Y, cs_Y,
59                                 buff_B, rs_B, cs_B );
60 
61       break;
62     }
63 
64     case FLA_COMPLEX:
65     {
66       scomplex* buff_A = FLA_COMPLEX_PTR( A );
67       scomplex* buff_Y = FLA_COMPLEX_PTR( Y );
68       scomplex* buff_B = FLA_COMPLEX_PTR( B );
69 
70       FLA_Eig_gest_il_opc_var3( m_AB,
71                                 buff_A, rs_A, cs_A,
72                                 buff_Y, rs_Y, cs_Y,
73                                 buff_B, rs_B, cs_B );
74 
75       break;
76     }
77 
78     case FLA_DOUBLE_COMPLEX:
79     {
80       dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
81       dcomplex* buff_Y = FLA_DOUBLE_COMPLEX_PTR( Y );
82       dcomplex* buff_B = FLA_DOUBLE_COMPLEX_PTR( B );
83 
84       FLA_Eig_gest_il_opz_var3( m_AB,
85                                 buff_A, rs_A, cs_A,
86                                 buff_Y, rs_Y, cs_Y,
87                                 buff_B, rs_B, cs_B );
88 
89       break;
90     }
91   }
92 
93   return FLA_SUCCESS;
94 }
95 
96 
97 
FLA_Eig_gest_il_ops_var3(int m_AB,float * buff_A,int rs_A,int cs_A,float * buff_Y,int rs_Y,int cs_Y,float * buff_B,int rs_B,int cs_B)98 FLA_Error FLA_Eig_gest_il_ops_var3( int m_AB,
99                                     float* buff_A, int rs_A, int cs_A,
100                                     float* buff_Y, int rs_Y, int cs_Y,
101                                     float* buff_B, int rs_B, int cs_B )
102 {
103   float*    buff_1   = FLA_FLOAT_PTR( FLA_ONE );
104   float*    buff_m1  = FLA_FLOAT_PTR( FLA_MINUS_ONE );
105   float*    buff_m1h = FLA_FLOAT_PTR( FLA_MINUS_ONE_HALF );
106   int       i;
107 
108   for ( i = 0; i < m_AB; ++i )
109   {
110     float*    a10t     = buff_A + (0  )*cs_A + (i  )*rs_A;
111     float*    A20      = buff_A + (0  )*cs_A + (i+1)*rs_A;
112     float*    alpha11  = buff_A + (i  )*cs_A + (i  )*rs_A;
113     float*    a21      = buff_A + (i  )*cs_A + (i+1)*rs_A;
114 
115     float*    y10t     = buff_Y + (0  )*cs_Y + (i  )*rs_Y;
116     float*    Y20      = buff_Y + (0  )*cs_Y + (i+1)*rs_Y;
117     float*    y21      = buff_Y + (i  )*cs_Y + (i+1)*rs_Y;
118 
119     float*    b10t     = buff_B + (0  )*cs_B + (i  )*rs_B;
120     float*    B20      = buff_B + (0  )*cs_B + (i+1)*rs_B;
121     float*    beta11   = buff_B + (i  )*cs_B + (i  )*rs_B;
122     float*    b21      = buff_B + (i  )*cs_B + (i+1)*rs_B;
123 
124     int       m_ahead  = m_AB - i - 1;
125     int       m_behind = i;
126 
127     /*------------------------------------------------------------*/
128 
129     // FLA_Axpy_external( FLA_MINUS_ONE_HALF, y10t, a10t );
130     bl1_saxpyv( BLIS1_NO_CONJUGATE,
131                 m_behind,
132                 buff_m1h,
133                 y10t, cs_Y,
134                 a10t, cs_A );
135 
136     // FLA_Dot2cs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, b10t, FLA_ONE, alpha11 );
137     bl1_sdot2s( BLIS1_CONJUGATE,
138                 m_behind,
139                 buff_m1,
140                 a10t, cs_A,
141                 b10t, cs_B,
142                 buff_1,
143                 alpha11 );
144 
145     // FLA_Inv_scal_external( beta11, alpha11 );
146     // FLA_Inv_scal_external( beta11, alpha11 );
147     bl1_sinvscals( beta11, alpha11 );
148     bl1_sinvscals( beta11, alpha11 );
149 
150     // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE,
151     //                     FLA_MINUS_ONE, A20, b10t, FLA_ONE, a21 );
152     bl1_sgemv( BLIS1_NO_TRANSPOSE,
153                BLIS1_CONJUGATE,
154                m_ahead,
155                m_behind,
156                buff_m1,
157                A20,  rs_A, cs_A,
158                b10t, cs_B,
159                buff_1,
160                a21,  rs_A );
161 
162     // FLA_Inv_scal_external( beta11, a21 );
163     bl1_sinvscalv( BLIS1_NO_CONJUGATE,
164                    m_ahead,
165                    beta11,
166                    a21, rs_A );
167 
168     // FLA_Axpy_external( FLA_MINUS_ONE_HALF, y10t, a10t );
169     bl1_saxpyv( BLIS1_NO_CONJUGATE,
170                 m_behind,
171                 buff_m1h,
172                 y10t, cs_Y,
173                 a10t, cs_A );
174 
175     // FLA_Inv_scal_external( beta11, a10t );
176     bl1_sinvscalv( BLIS1_NO_CONJUGATE,
177                    m_behind,
178                    beta11,
179                    a10t, cs_A );
180 
181     // FLA_Ger_external( FLA_ONE, b21, a10t, Y20 );
182     bl1_sger( BLIS1_NO_CONJUGATE,
183               BLIS1_NO_CONJUGATE,
184               m_ahead,
185               m_behind,
186               buff_1,
187               b21,  rs_B,
188               a10t, cs_A,
189               Y20,  rs_Y, cs_Y );
190 
191     // FLA_Copy_external( b21, y21 );
192     // FLA_Scal_external( alpha11, y21 );
193     bl1_scopyv( BLIS1_NO_CONJUGATE,
194                 m_ahead,
195                 b21, rs_B,
196                 y21, rs_Y );
197     bl1_sscalv( BLIS1_NO_CONJUGATE,
198                 m_ahead,
199                 alpha11,
200                 y21, rs_Y );
201 
202     // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE,
203     //                     FLA_ONE, B20, a10t, FLA_ONE, y21 );
204     bl1_sgemv( BLIS1_NO_TRANSPOSE,
205                BLIS1_CONJUGATE,
206                m_ahead,
207                m_behind,
208                buff_1,
209                B20,  rs_B, cs_B,
210                a10t, cs_A,
211                buff_1,
212                y21,  rs_Y );
213 
214     /*------------------------------------------------------------*/
215 
216   }
217 
218   return FLA_SUCCESS;
219 }
220 
221 
222 
FLA_Eig_gest_il_opd_var3(int m_AB,double * buff_A,int rs_A,int cs_A,double * buff_Y,int rs_Y,int cs_Y,double * buff_B,int rs_B,int cs_B)223 FLA_Error FLA_Eig_gest_il_opd_var3( int m_AB,
224                                     double* buff_A, int rs_A, int cs_A,
225                                     double* buff_Y, int rs_Y, int cs_Y,
226                                     double* buff_B, int rs_B, int cs_B )
227 {
228   double*   buff_1   = FLA_DOUBLE_PTR( FLA_ONE );
229   double*   buff_m1  = FLA_DOUBLE_PTR( FLA_MINUS_ONE );
230   double*   buff_m1h = FLA_DOUBLE_PTR( FLA_MINUS_ONE_HALF );
231   int       i;
232 
233   for ( i = 0; i < m_AB; ++i )
234   {
235     double*   a10t     = buff_A + (0  )*cs_A + (i  )*rs_A;
236     double*   A20      = buff_A + (0  )*cs_A + (i+1)*rs_A;
237     double*   alpha11  = buff_A + (i  )*cs_A + (i  )*rs_A;
238     double*   a21      = buff_A + (i  )*cs_A + (i+1)*rs_A;
239 
240     double*   y10t     = buff_Y + (0  )*cs_Y + (i  )*rs_Y;
241     double*   Y20      = buff_Y + (0  )*cs_Y + (i+1)*rs_Y;
242     double*   y21      = buff_Y + (i  )*cs_Y + (i+1)*rs_Y;
243 
244     double*   b10t     = buff_B + (0  )*cs_B + (i  )*rs_B;
245     double*   B20      = buff_B + (0  )*cs_B + (i+1)*rs_B;
246     double*   beta11   = buff_B + (i  )*cs_B + (i  )*rs_B;
247     double*   b21      = buff_B + (i  )*cs_B + (i+1)*rs_B;
248 
249     int       m_ahead  = m_AB - i - 1;
250     int       m_behind = i;
251 
252     /*------------------------------------------------------------*/
253 
254     // FLA_Axpy_external( FLA_MINUS_ONE_HALF, y10t, a10t );
255     bl1_daxpyv( BLIS1_NO_CONJUGATE,
256                 m_behind,
257                 buff_m1h,
258                 y10t, cs_Y,
259                 a10t, cs_A );
260 
261     // FLA_Dot2cs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, b10t, FLA_ONE, alpha11 );
262     bl1_ddot2s( BLIS1_CONJUGATE,
263                 m_behind,
264                 buff_m1,
265                 a10t, cs_A,
266                 b10t, cs_B,
267                 buff_1,
268                 alpha11 );
269 
270     // FLA_Inv_scal_external( beta11, alpha11 );
271     // FLA_Inv_scal_external( beta11, alpha11 );
272     bl1_dinvscals( beta11, alpha11 );
273     bl1_dinvscals( beta11, alpha11 );
274 
275     // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE,
276     //                     FLA_MINUS_ONE, A20, b10t, FLA_ONE, a21 );
277     bl1_dgemv( BLIS1_NO_TRANSPOSE,
278                BLIS1_CONJUGATE,
279                m_ahead,
280                m_behind,
281                buff_m1,
282                A20,  rs_A, cs_A,
283                b10t, cs_B,
284                buff_1,
285                a21,  rs_A );
286 
287     // FLA_Inv_scal_external( beta11, a21 );
288     bl1_dinvscalv( BLIS1_NO_CONJUGATE,
289                    m_ahead,
290                    beta11,
291                    a21, rs_A );
292 
293     // FLA_Axpy_external( FLA_MINUS_ONE_HALF, y10t, a10t );
294     bl1_daxpyv( BLIS1_NO_CONJUGATE,
295                 m_behind,
296                 buff_m1h,
297                 y10t, cs_Y,
298                 a10t, cs_A );
299 
300     // FLA_Inv_scal_external( beta11, a10t );
301     bl1_dinvscalv( BLIS1_NO_CONJUGATE,
302                    m_behind,
303                    beta11,
304                    a10t, cs_A );
305 
306     // FLA_Ger_external( FLA_ONE, b21, a10t, Y20 );
307     bl1_dger( BLIS1_NO_CONJUGATE,
308               BLIS1_NO_CONJUGATE,
309               m_ahead,
310               m_behind,
311               buff_1,
312               b21,  rs_B,
313               a10t, cs_A,
314               Y20,  rs_Y, cs_Y );
315 
316     // FLA_Copy_external( b21, y21 );
317     // FLA_Scal_external( alpha11, y21 );
318     bl1_dcopyv( BLIS1_NO_CONJUGATE,
319                 m_ahead,
320                 b21, rs_B,
321                 y21, rs_Y );
322     bl1_dscalv( BLIS1_NO_CONJUGATE,
323                 m_ahead,
324                 alpha11,
325                 y21, rs_Y );
326 
327     // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE,
328     //                     FLA_ONE, B20, a10t, FLA_ONE, y21 );
329     bl1_dgemv( BLIS1_NO_TRANSPOSE,
330                BLIS1_CONJUGATE,
331                m_ahead,
332                m_behind,
333                buff_1,
334                B20,  rs_B, cs_B,
335                a10t, cs_A,
336                buff_1,
337                y21,  rs_Y );
338 
339     /*------------------------------------------------------------*/
340 
341   }
342 
343   return FLA_SUCCESS;
344 }
345 
346 
347 
FLA_Eig_gest_il_opc_var3(int m_AB,scomplex * buff_A,int rs_A,int cs_A,scomplex * buff_Y,int rs_Y,int cs_Y,scomplex * buff_B,int rs_B,int cs_B)348 FLA_Error FLA_Eig_gest_il_opc_var3( int m_AB,
349                                     scomplex* buff_A, int rs_A, int cs_A,
350                                     scomplex* buff_Y, int rs_Y, int cs_Y,
351                                     scomplex* buff_B, int rs_B, int cs_B )
352 {
353   scomplex* buff_1   = FLA_COMPLEX_PTR( FLA_ONE );
354   scomplex* buff_m1  = FLA_COMPLEX_PTR( FLA_MINUS_ONE );
355   scomplex* buff_m1h = FLA_COMPLEX_PTR( FLA_MINUS_ONE_HALF );
356   int       i;
357 
358   for ( i = 0; i < m_AB; ++i )
359   {
360     scomplex* a10t     = buff_A + (0  )*cs_A + (i  )*rs_A;
361     scomplex* A20      = buff_A + (0  )*cs_A + (i+1)*rs_A;
362     scomplex* alpha11  = buff_A + (i  )*cs_A + (i  )*rs_A;
363     scomplex* a21      = buff_A + (i  )*cs_A + (i+1)*rs_A;
364 
365     scomplex* y10t     = buff_Y + (0  )*cs_Y + (i  )*rs_Y;
366     scomplex* Y20      = buff_Y + (0  )*cs_Y + (i+1)*rs_Y;
367     scomplex* y21      = buff_Y + (i  )*cs_Y + (i+1)*rs_Y;
368 
369     scomplex* b10t     = buff_B + (0  )*cs_B + (i  )*rs_B;
370     scomplex* B20      = buff_B + (0  )*cs_B + (i+1)*rs_B;
371     scomplex* beta11   = buff_B + (i  )*cs_B + (i  )*rs_B;
372     scomplex* b21      = buff_B + (i  )*cs_B + (i+1)*rs_B;
373 
374     int       m_ahead  = m_AB - i - 1;
375     int       m_behind = i;
376 
377     /*------------------------------------------------------------*/
378 
379     // FLA_Axpy_external( FLA_MINUS_ONE_HALF, y10t, a10t );
380     bl1_caxpyv( BLIS1_NO_CONJUGATE,
381                 m_behind,
382                 buff_m1h,
383                 y10t, cs_Y,
384                 a10t, cs_A );
385 
386     // FLA_Dot2cs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, b10t, FLA_ONE, alpha11 );
387     bl1_cdot2s( BLIS1_CONJUGATE,
388                 m_behind,
389                 buff_m1,
390                 a10t, cs_A,
391                 b10t, cs_B,
392                 buff_1,
393                 alpha11 );
394 
395     // FLA_Inv_scal_external( beta11, alpha11 );
396     // FLA_Inv_scal_external( beta11, alpha11 );
397     bl1_cinvscals( beta11, alpha11 );
398     bl1_cinvscals( beta11, alpha11 );
399 
400     // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE,
401     //                     FLA_MINUS_ONE, A20, b10t, FLA_ONE, a21 );
402     bl1_cgemv( BLIS1_NO_TRANSPOSE,
403                BLIS1_CONJUGATE,
404                m_ahead,
405                m_behind,
406                buff_m1,
407                A20,  rs_A, cs_A,
408                b10t, cs_B,
409                buff_1,
410                a21,  rs_A );
411 
412     // FLA_Inv_scal_external( beta11, a21 );
413     bl1_cinvscalv( BLIS1_NO_CONJUGATE,
414                    m_ahead,
415                    beta11,
416                    a21, rs_A );
417 
418     // FLA_Axpy_external( FLA_MINUS_ONE_HALF, y10t, a10t );
419     bl1_caxpyv( BLIS1_NO_CONJUGATE,
420                 m_behind,
421                 buff_m1h,
422                 y10t, cs_Y,
423                 a10t, cs_A );
424 
425     // FLA_Inv_scal_external( beta11, a10t );
426     bl1_cinvscalv( BLIS1_NO_CONJUGATE,
427                    m_behind,
428                    beta11,
429                    a10t, cs_A );
430 
431     // FLA_Ger_external( FLA_ONE, b21, a10t, Y20 );
432     bl1_cger( BLIS1_NO_CONJUGATE,
433               BLIS1_NO_CONJUGATE,
434               m_ahead,
435               m_behind,
436               buff_1,
437               b21,  rs_B,
438               a10t, cs_A,
439               Y20,  rs_Y, cs_Y );
440 
441     // FLA_Copy_external( b21, y21 );
442     // FLA_Scal_external( alpha11, y21 );
443     bl1_ccopyv( BLIS1_NO_CONJUGATE,
444                 m_ahead,
445                 b21, rs_B,
446                 y21, rs_Y );
447     bl1_cscalv( BLIS1_NO_CONJUGATE,
448                 m_ahead,
449                 alpha11,
450                 y21, rs_Y );
451 
452     // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE,
453     //                     FLA_ONE, B20, a10t, FLA_ONE, y21 );
454     bl1_cgemv( BLIS1_NO_TRANSPOSE,
455                BLIS1_CONJUGATE,
456                m_ahead,
457                m_behind,
458                buff_1,
459                B20,  rs_B, cs_B,
460                a10t, cs_A,
461                buff_1,
462                y21,  rs_Y );
463 
464     /*------------------------------------------------------------*/
465 
466   }
467 
468   return FLA_SUCCESS;
469 }
470 
471 
472 
FLA_Eig_gest_il_opz_var3(int m_AB,dcomplex * buff_A,int rs_A,int cs_A,dcomplex * buff_Y,int rs_Y,int cs_Y,dcomplex * buff_B,int rs_B,int cs_B)473 FLA_Error FLA_Eig_gest_il_opz_var3( int m_AB,
474                                     dcomplex* buff_A, int rs_A, int cs_A,
475                                     dcomplex* buff_Y, int rs_Y, int cs_Y,
476                                     dcomplex* buff_B, int rs_B, int cs_B )
477 {
478   dcomplex* buff_1   = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
479   dcomplex* buff_m1  = FLA_DOUBLE_COMPLEX_PTR( FLA_MINUS_ONE );
480   dcomplex* buff_m1h = FLA_DOUBLE_COMPLEX_PTR( FLA_MINUS_ONE_HALF );
481   int       i;
482 
483   for ( i = 0; i < m_AB; ++i )
484   {
485     dcomplex* a10t     = buff_A + (0  )*cs_A + (i  )*rs_A;
486     dcomplex* A20      = buff_A + (0  )*cs_A + (i+1)*rs_A;
487     dcomplex* alpha11  = buff_A + (i  )*cs_A + (i  )*rs_A;
488     dcomplex* a21      = buff_A + (i  )*cs_A + (i+1)*rs_A;
489 
490     dcomplex* y10t     = buff_Y + (0  )*cs_Y + (i  )*rs_Y;
491     dcomplex* Y20      = buff_Y + (0  )*cs_Y + (i+1)*rs_Y;
492     dcomplex* y21      = buff_Y + (i  )*cs_Y + (i+1)*rs_Y;
493 
494     dcomplex* b10t     = buff_B + (0  )*cs_B + (i  )*rs_B;
495     dcomplex* B20      = buff_B + (0  )*cs_B + (i+1)*rs_B;
496     dcomplex* beta11   = buff_B + (i  )*cs_B + (i  )*rs_B;
497     dcomplex* b21      = buff_B + (i  )*cs_B + (i+1)*rs_B;
498 
499     int       m_ahead  = m_AB - i - 1;
500     int       m_behind = i;
501 
502     /*------------------------------------------------------------*/
503 
504     // FLA_Axpy_external( FLA_MINUS_ONE_HALF, y10t, a10t );
505     bl1_zaxpyv( BLIS1_NO_CONJUGATE,
506                 m_behind,
507                 buff_m1h,
508                 y10t, cs_Y,
509                 a10t, cs_A );
510 
511     // FLA_Dot2cs_external( FLA_CONJUGATE, FLA_MINUS_ONE, a10t, b10t, FLA_ONE, alpha11 );
512     bl1_zdot2s( BLIS1_CONJUGATE,
513                 m_behind,
514                 buff_m1,
515                 a10t, cs_A,
516                 b10t, cs_B,
517                 buff_1,
518                 alpha11 );
519 
520     // FLA_Inv_scal_external( beta11, alpha11 );
521     // FLA_Inv_scal_external( beta11, alpha11 );
522     bl1_zinvscals( beta11, alpha11 );
523     bl1_zinvscals( beta11, alpha11 );
524 
525     // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE,
526     //                     FLA_MINUS_ONE, A20, b10t, FLA_ONE, a21 );
527     bl1_zgemv( BLIS1_NO_TRANSPOSE,
528                BLIS1_CONJUGATE,
529                m_ahead,
530                m_behind,
531                buff_m1,
532                A20,  rs_A, cs_A,
533                b10t, cs_B,
534                buff_1,
535                a21,  rs_A );
536 
537     // FLA_Inv_scal_external( beta11, a21 );
538     bl1_zinvscalv( BLIS1_NO_CONJUGATE,
539                    m_ahead,
540                    beta11,
541                    a21, rs_A );
542 
543     // FLA_Axpy_external( FLA_MINUS_ONE_HALF, y10t, a10t );
544     bl1_zaxpyv( BLIS1_NO_CONJUGATE,
545                 m_behind,
546                 buff_m1h,
547                 y10t, cs_Y,
548                 a10t, cs_A );
549 
550     // FLA_Inv_scal_external( beta11, a10t );
551     bl1_zinvscalv( BLIS1_NO_CONJUGATE,
552                    m_behind,
553                    beta11,
554                    a10t, cs_A );
555 
556     // FLA_Ger_external( FLA_ONE, b21, a10t, Y20 );
557     bl1_zger( BLIS1_NO_CONJUGATE,
558               BLIS1_NO_CONJUGATE,
559               m_ahead,
560               m_behind,
561               buff_1,
562               b21,  rs_B,
563               a10t, cs_A,
564               Y20,  rs_Y, cs_Y );
565 
566     // FLA_Copy_external( b21, y21 );
567     // FLA_Scal_external( alpha11, y21 );
568     bl1_zcopyv( BLIS1_NO_CONJUGATE,
569                 m_ahead,
570                 b21, rs_B,
571                 y21, rs_Y );
572     bl1_zscalv( BLIS1_NO_CONJUGATE,
573                 m_ahead,
574                 alpha11,
575                 y21, rs_Y );
576 
577     // FLA_Gemvc_external( FLA_NO_TRANSPOSE, FLA_CONJUGATE,
578     //                     FLA_ONE, B20, a10t, FLA_ONE, y21 );
579     bl1_zgemv( BLIS1_NO_TRANSPOSE,
580                BLIS1_CONJUGATE,
581                m_ahead,
582                m_behind,
583                buff_1,
584                B20,  rs_B, cs_B,
585                a10t, cs_A,
586                buff_1,
587                y21,  rs_Y );
588 
589     /*------------------------------------------------------------*/
590 
591   }
592 
593   return FLA_SUCCESS;
594 }
595 
596