Fast Auxiliary Space Preconditioning  1.8.4 Feb/15/2016
blas_smat.c
Go to the documentation of this file.
1 
8 #include "fasp.h"
9 #include "fasp_functs.h"
10 
11 /*---------------------------------*/
12 /*-- Public Functions --*/
13 /*---------------------------------*/
27  const INT n,
28  const REAL alpha)
29 {
30  INT i;
31 
32  for (i=0; i<n*n; i++) {
33  a[i] = alpha * a[i];
34  }
35 
36  return;
37 }
38 
55  REAL *b,
56  const INT n,
57  const REAL alpha,
58  const REAL beta,
59  REAL *c)
60 {
61  INT i;
62 
63  for (i=0; i<n*n; i++) {
64  c[i] = alpha * a[i] + beta * b[i];
65  }
66 
67  return;
68 }
69 
70 
84  REAL *b,
85  REAL *c)
86 {
87  const REAL b0 = b[0], b1 = b[1];
88 
89  c[0] = a[0]*b0 + a[1]*b1;
90  c[1] = a[2]*b0 + a[3]*b1;
91 }
92 
106  REAL *b,
107  REAL *c)
108 {
109  const REAL b0 = b[0], b1 = b[1], b2 = b[2];
110 
111  c[0] = a[0]*b0 + a[1]*b1 + a[2]*b2;
112  c[1] = a[3]*b0 + a[4]*b1 + a[5]*b2;
113  c[2] = a[6]*b0 + a[7]*b1 + a[8]*b2;
114 }
115 
129  REAL *b,
130  REAL *c)
131 {
132  const REAL b0 = b[0], b1 = b[1], b2 = b[2];
133  const REAL b3 = b[3], b4 = b[4];
134 
135  c[0] = a[0]*b0 + a[1]*b1 + a[2]*b2 + a[3]*b3 + a[4]*b4;
136  c[1] = a[5]*b0 + a[6]*b1 + a[7]*b2 + a[8]*b3 + a[9]*b4;
137  c[2] = a[10]*b0 + a[11]*b1 + a[12]*b2 + a[13]*b3 + a[14]*b4;
138  c[3] = a[15]*b0 + a[16]*b1 + a[17]*b2 + a[18]*b3 + a[19]*b4;
139  c[4] = a[20]*b0 + a[21]*b1 + a[22]*b2 + a[23]*b3 + a[24]*b4;
140 }
141 
155  REAL *b,
156  REAL *c)
157 {
158  const REAL b0 = b[0], b1 = b[1], b2 = b[2];
159  const REAL b3 = b[3], b4 = b[4], b5 = b[5], b6 = b[6];
160 
161  c[0] = a[0]*b0 + a[1]*b1 + a[2]*b2 + a[3]*b3 + a[4]*b4 + a[5]*b5 + a[6]*b6;
162  c[1] = a[7]*b0 + a[8]*b1 + a[9]*b2 + a[10]*b3 + a[11]*b4 + a[12]*b5 + a[13]*b6;
163  c[2] = a[14]*b0 + a[15]*b1 + a[16]*b2 + a[17]*b3 + a[18]*b4 + a[19]*b5 + a[20]*b6;
164  c[3] = a[21]*b0 + a[22]*b1 + a[23]*b2 + a[24]*b3 + a[25]*b4 + a[26]*b5 + a[27]*b6;
165  c[4] = a[28]*b0 + a[29]*b1 + a[30]*b2 + a[31]*b3 + a[32]*b4 + a[33]*b5 + a[34]*b6;
166  c[5] = a[35]*b0 + a[36]*b1 + a[37]*b2 + a[38]*b3 + a[39]*b4 + a[40]*b5 + a[41]*b6;
167  c[6] = a[42]*b0 + a[43]*b1 + a[44]*b2 + a[45]*b3 + a[46]*b4 + a[47]*b5 + a[48]*b6;
168 }
169 
184  REAL *b,
185  REAL *c,
186  const INT n)
187 {
188  switch (n) {
189  case 2:
190  fasp_blas_smat_mxv_nc2(a, b, c);
191  break;
192 
193  case 3:
194  fasp_blas_smat_mxv_nc3(a, b, c);
195  break;
196 
197  case 5:
198  fasp_blas_smat_mxv_nc5(a, b, c);
199  break;
200 
201  case 7:
202  fasp_blas_smat_mxv_nc7(a, b, c);
203  break;
204 
205  default:
206  {
207  INT i,j,in=0;
208  REAL temp;
209 
210  for (i=0; i<n; ++i, in+=n) {
211  temp = 0.0;
212  for (j=0; j<n; ++j) temp += a[in+j]*b[j];
213  c[i]=temp;
214  } // end for i
215  }
216  break;
217  }
218  return;
219 }
220 
234  REAL *b,
235  REAL *c)
236 {
237  const REAL a0 = a[0], a1 = a[1];
238  const REAL a2 = a[2], a3 = a[3];
239 
240  const REAL b0 = b[0], b1 = b[1];
241  const REAL b2 = b[2], b3 = b[3];
242 
243  c[0] = a0*b0 + a1*b2;
244  c[1] = a0*b1 + a1*b3;
245  c[2] = a2*b0 + a3*b2;
246  c[3] = a2*b1 + a3*b3;
247 
248 }
249 
263  REAL *b,
264  REAL *c)
265 {
266  const REAL a0 = a[0], a1 = a[1], a2 = a[2];
267  const REAL a3 = a[3], a4 = a[4], a5 = a[5];
268  const REAL a6 = a[6], a7 = a[7], a8 = a[8];
269 
270  const REAL b0 = b[0], b1 = b[1], b2 = b[2];
271  const REAL b3 = b[3], b4 = b[4], b5 = b[5];
272  const REAL b6 = b[6], b7 = b[7], b8 = b[8];
273 
274  c[0] = a0*b0 + a1*b3 + a2*b6;
275  c[1] = a0*b1 + a1*b4 + a2*b7;
276  c[2] = a0*b2 + a1*b5 + a2*b8;
277 
278  c[3] = a3*b0 + a4*b3 + a5*b6;
279  c[4] = a3*b1 + a4*b4 + a5*b7;
280  c[5] = a3*b2 + a4*b5 + a5*b8;
281 
282  c[6] = a6*b0 + a7*b3 + a8*b6;
283  c[7] = a6*b1 + a7*b4 + a8*b7;
284  c[8] = a6*b2 + a7*b5 + a8*b8;
285 }
286 
300  REAL *b,
301  REAL *c)
302 {
303  const REAL a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4];
304  const REAL a5 = a[5], a6 = a[6], a7 = a[7], a8 = a[8], a9 = a[9];
305  const REAL a10 = a[10], a11 = a[11], a12 = a[12], a13 = a[13], a14 = a[14];
306  const REAL a15 = a[15], a16 = a[16], a17 = a[17], a18 = a[18], a19 = a[19];
307  const REAL a20 = a[20], a21 = a[21], a22 = a[22], a23 = a[23], a24 = a[24];
308 
309  const REAL b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4];
310  const REAL b5 = b[5], b6 = b[6], b7 = b[7], b8 = b[8], b9 = b[9];
311  const REAL b10 = b[10], b11 = b[11], b12 = b[12], b13 = b[13], b14 = b[14];
312  const REAL b15 = b[15], b16 = b[16], b17 = b[17], b18 = b[18], b19 = b[19];
313  const REAL b20 = b[20], b21 = b[21], b22 = b[22], b23 = b[23], b24 = b[24];
314 
315  c[0] = a0*b0 + a1*b5 + a2*b10 + a3*b15 + a4*b20;
316  c[1] = a0*b1 + a1*b6 + a2*b11 + a3*b16 + a4*b21;
317  c[2] = a0*b2 + a1*b7 + a2*b12 + a3*b17 + a4*b22;
318  c[3] = a0*b3 + a1*b8 + a2*b13 + a3*b18 + a4*b23;
319  c[4] = a0*b4 + a1*b9 + a2*b14 + a3*b19 + a4*b24;
320 
321  c[5] = a5*b0 + a6*b5 + a7*b10 + a8*b15 + a9*b20;
322  c[6] = a5*b1 + a6*b6 + a7*b11 + a8*b16 + a9*b21;
323  c[7] = a5*b2 + a6*b7 + a7*b12 + a8*b17 + a9*b22;
324  c[8] = a5*b3 + a6*b8 + a7*b13 + a8*b18 + a9*b23;
325  c[9] = a5*b4 + a6*b9 + a7*b14 + a8*b19 + a9*b24;
326 
327  c[10] = a10*b0 + a11*b5 + a12*b10 + a13*b15 + a14*b20;
328  c[11] = a10*b1 + a11*b6 + a12*b11 + a13*b16 + a14*b21;
329  c[12] = a10*b2 + a11*b7 + a12*b12 + a13*b17 + a14*b22;
330  c[13] = a10*b3 + a11*b8 + a12*b13 + a13*b18 + a14*b23;
331  c[14] = a10*b4 + a11*b9 + a12*b14 + a13*b19 + a14*b24;
332 
333  c[15] = a15*b0 + a16*b5 + a17*b10 + a18*b15 + a19*b20;
334  c[16] = a15*b1 + a16*b6 + a17*b11 + a18*b16 + a19*b21;
335  c[17] = a15*b2 + a16*b7 + a17*b12 + a18*b17 + a19*b22;
336  c[18] = a15*b3 + a16*b8 + a17*b13 + a18*b18 + a19*b23;
337  c[19] = a15*b4 + a16*b9 + a17*b14 + a18*b19 + a19*b24;
338 
339  c[20] = a20*b0 + a21*b5 + a22*b10 + a23*b15 + a24*b20;
340  c[21] = a20*b1 + a21*b6 + a22*b11 + a23*b16 + a24*b21;
341  c[22] = a20*b2 + a21*b7 + a22*b12 + a23*b17 + a24*b22;
342  c[23] = a20*b3 + a21*b8 + a22*b13 + a23*b18 + a24*b23;
343  c[24] = a20*b4 + a21*b9 + a22*b14 + a23*b19 + a24*b24;
344 }
345 
359  REAL *b,
360  REAL *c)
361 {
362  const REAL a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5], a6 = a[6];
363  const REAL a7 = a[7], a8 = a[8], a9 = a[9], a10 = a[10], a11 = a[11], a12 = a[12], a13 = a[13];
364  const REAL a14 = a[14], a15 = a[15], a16 = a[16], a17 = a[17], a18 = a[18], a19 = a[19], a20 = a[20];
365  const REAL a21 = a[21], a22 = a[22], a23 = a[23], a24 = a[24], a25 = a[25], a26 = a[26], a27 = a[27];
366  const REAL a28 = a[28], a29 = a[29], a30 = a[30], a31 = a[31], a32 = a[32], a33 = a[33], a34 = a[34];
367  const REAL a35 = a[35], a36 = a[36], a37 = a[37], a38 = a[38], a39 = a[39], a40 = a[40], a41 = a[41];
368  const REAL a42 = a[42], a43 = a[43], a44 = a[44], a45 = a[45], a46 = a[46], a47 = a[47], a48 = a[48];
369 
370  const REAL b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5], b6 = b[6];
371  const REAL b7 = b[7], b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11], b12 = b[12], b13 = b[13];
372  const REAL b14 = b[14], b15 = b[15], b16 = b[16], b17 = b[17], b18 = b[18], b19 = b[19], b20 = b[20];
373  const REAL b21 = b[21], b22 = b[22], b23 = b[23], b24 = b[24], b25 = b[25], b26 = b[26], b27 = b[27];
374  const REAL b28 = b[28], b29 = b[29], b30 = b[30], b31 = b[31], b32 = b[32], b33 = b[33], b34 = b[34];
375  const REAL b35 = b[35], b36 = b[36], b37 = b[37], b38 = b[38], b39 = b[39], b40 = b[40], b41 = b[41];
376  const REAL b42 = b[42], b43 = b[43], b44 = b[44], b45 = b[45], b46 = b[46], b47 = b[47], b48 = b[48];
377 
378  c[0] = a0*b0 + a1*b7 + a2*b14 + a3*b21 + a4*b28 + a5*b35 + a6*b42;
379  c[1] = a0*b1 + a1*b8 + a2*b15 + a3*b22 + a4*b29 + a5*b36 + a6*b43;
380  c[2] = a0*b2 + a1*b9 + a2*b16 + a3*b23 + a4*b30 + a5*b37 + a6*b44;
381  c[3] = a0*b3 + a1*b10 + a2*b17 + a3*b24 + a4*b31 + a5*b38 + a6*b45;
382  c[4] = a0*b4 + a1*b11 + a2*b18 + a3*b25 + a4*b32 + a5*b39 + a6*b46;
383  c[5] = a0*b5 + a1*b12 + a2*b19 + a3*b26 + a4*b33 + a5*b40 + a6*b47;
384  c[6] = a0*b6 + a1*b13 + a2*b20 + a3*b27 + a4*b34 + a5*b41 + a6*b48;
385 
386  c[7] = a7*b0 + a8*b7 + a9*b14 + a10*b21 + a11*b28 + a12*b35 + a13*b42;
387  c[8] = a7*b1 + a8*b8 + a9*b15 + a10*b22 + a11*b29 + a12*b36 + a13*b43;
388  c[9] = a7*b2 + a8*b9 + a9*b16 + a10*b23 + a11*b30 + a12*b37 + a13*b44;
389  c[10] = a7*b3 + a8*b10 + a9*b17 + a10*b24 + a11*b31 + a12*b38 + a13*b45;
390  c[11] = a7*b4 + a8*b11 + a9*b18 + a10*b25 + a11*b32 + a12*b39 + a13*b46;
391  c[12] = a7*b5 + a8*b12 + a9*b19 + a10*b26 + a11*b33 + a12*b40 + a13*b47;
392  c[13] = a7*b6 + a8*b13 + a9*b20 + a10*b27 + a11*b34 + a12*b41 + a13*b48;
393 
394  c[14] = a14*b0 + a15*b7 + a16*b14 + a17*b21 + a18*b28 + a19*b35 + a20*b42;
395  c[15] = a14*b1 + a15*b8 + a16*b15 + a17*b22 + a18*b29 + a19*b36 + a20*b43;
396  c[16] = a14*b2 + a15*b9 + a16*b16 + a17*b23 + a18*b30 + a19*b37 + a20*b44;
397  c[17] = a14*b3 + a15*b10 + a16*b17 + a17*b24 + a18*b31 + a19*b38 + a20*b45;
398  c[18] = a14*b4 + a15*b11 + a16*b18 + a17*b25 + a18*b32 + a19*b39 + a20*b46;
399  c[19] = a14*b5 + a15*b12 + a16*b19 + a17*b26 + a18*b33 + a19*b40 + a20*b47;
400  c[20] = a14*b6 + a15*b13 + a16*b20 + a17*b27 + a18*b34 + a19*b41 + a20*b48;
401 
402  c[21] = a21*b0 + a22*b7 + a23*b14 + a24*b21 + a25*b28 + a26*b35 + a27*b42;
403  c[22] = a21*b1 + a22*b8 + a23*b15 + a24*b22 + a25*b29 + a26*b36 + a27*b43;
404  c[23] = a21*b2 + a22*b9 + a23*b16 + a24*b23 + a25*b30 + a26*b37 + a27*b44;
405  c[24] = a21*b3 + a22*b10 + a23*b17 + a24*b24 + a25*b31 + a26*b38 + a27*b45;
406  c[25] = a21*b4 + a22*b11 + a23*b18 + a24*b25 + a25*b32 + a26*b39 + a27*b46;
407  c[26] = a21*b5 + a22*b12 + a23*b19 + a24*b26 + a25*b33 + a26*b40 + a27*b47;
408  c[27] = a21*b6 + a22*b13 + a23*b20 + a24*b27 + a25*b34 + a26*b41 + a27*b48;
409 
410  c[28] = a28*b0 + a29*b7 + a30*b14 + a31*b21 + a32*b28 + a33*b35 + a34*b42;
411  c[29] = a28*b1 + a29*b8 + a30*b15 + a31*b22 + a32*b29 + a33*b36 + a34*b43;
412  c[30] = a28*b2 + a29*b9 + a30*b16 + a31*b23 + a32*b30 + a33*b37 + a34*b44;
413  c[31] = a28*b3 + a29*b10 + a30*b17 + a31*b24 + a32*b31 + a33*b38 + a34*b45;
414  c[32] = a28*b4 + a29*b11 + a30*b18 + a31*b25 + a32*b32 + a33*b39 + a34*b46;
415  c[33] = a28*b5 + a29*b12 + a30*b19 + a31*b26 + a32*b33 + a33*b40 + a34*b47;
416  c[34] = a28*b6 + a29*b13 + a30*b20 + a31*b27 + a32*b34 + a33*b41 + a34*b48;
417 
418  c[35] = a35*b0 + a36*b7 + a37*b14 + a38*b21 + a39*b28 + a40*b35 + a41*b42;
419  c[36] = a35*b1 + a36*b8 + a37*b15 + a38*b22 + a39*b29 + a40*b36 + a41*b43;
420  c[37] = a35*b2 + a36*b9 + a37*b16 + a38*b23 + a39*b30 + a40*b37 + a41*b44;
421  c[38] = a35*b3 + a36*b10 + a37*b17 + a38*b24 + a39*b31 + a40*b38 + a41*b45;
422  c[39] = a35*b4 + a36*b11 + a37*b18 + a38*b25 + a39*b32 + a40*b39 + a41*b46;
423  c[40] = a35*b5 + a36*b12 + a37*b19 + a38*b26 + a39*b33 + a40*b40 + a41*b47;
424  c[41] = a35*b6 + a36*b13 + a37*b20 + a38*b27 + a39*b34 + a40*b41 + a41*b48;
425 
426  c[42] = a42*b0 + a43*b7 + a44*b14 + a45*b21 + a46*b28 + a47*b35 + a48*b42;
427  c[43] = a42*b1 + a43*b8 + a44*b15 + a45*b22 + a46*b29 + a47*b36 + a48*b43;
428  c[44] = a42*b2 + a43*b9 + a44*b16 + a45*b23 + a46*b30 + a47*b37 + a48*b44;
429  c[45] = a42*b3 + a43*b10 + a44*b17 + a45*b24 + a46*b31 + a47*b38 + a48*b45;
430  c[46] = a42*b4 + a43*b11 + a44*b18 + a45*b25 + a46*b32 + a47*b39 + a48*b46;
431  c[47] = a42*b5 + a43*b12 + a44*b19 + a45*b26 + a46*b33 + a47*b40 + a48*b47;
432  c[48] = a42*b6 + a43*b13 + a44*b20 + a45*b27 + a46*b34 + a47*b41 + a48*b48;
433 }
434 
449  REAL *b,
450  REAL *c,
451  const INT n)
452 {
453 
454  switch (n) {
455  case 2:
456  fasp_blas_smat_mul_nc2(a, b, c); break;
457 
458  case 3:
459  fasp_blas_smat_mul_nc3(a, b, c); break;
460 
461  case 5:
462  fasp_blas_smat_mul_nc5(a, b, c); break;
463 
464  case 7:
465  fasp_blas_smat_mul_nc7(a, b, c); break;
466 
467  default: {
468  const INT n2 = n*n;
469  INT i,j,k;
470  REAL temp;
471 
472  for (i=0; i<n2; i+=n) {
473  for (j=0; j<n; ++j) {
474  temp = 0.0; // Fixed by Cheosong. Feb/22/2011.
475  for (k=0; k<n; ++k) temp += a[i+k]*b[k*n+j];
476  c[i+j] = temp;
477  } // end for j
478  } // end for i
479  }
480  break;
481  }
482  return;
483 }
484 
501  REAL *x,
502  REAL *y,
503  REAL *z)
504 {
505  z[0] = a*x[0] + y[0];
506  z[1] = a*x[1] + y[1];
507 
508  z[2] = a*x[2] + y[2];
509  z[3] = a*x[3] + y[3];
510 }
511 
528  REAL *x,
529  REAL *y,
530  REAL *z)
531 {
532  z[0] = a*x[0] + y[0];
533  z[1] = a*x[1] + y[1];
534  z[2] = a*x[2] + y[2];
535 
536  z[3] = a*x[3] + y[3];
537  z[4] = a*x[4] + y[4];
538  z[5] = a*x[5] + y[5];
539 
540  z[6] = a*x[6] + y[6];
541  z[7] = a*x[7] + y[7];
542  z[8] = a*x[8] + y[8];
543 }
544 
561  REAL *x,
562  REAL *y,
563  REAL *z)
564 {
565  z[0] = a*x[0] + y[0];
566  z[1] = a*x[1] + y[1];
567  z[2] = a*x[2] + y[2];
568  z[3] = a*x[3] + y[3];
569  z[4] = a*x[4] + y[4];
570 
571  z[5] = a*x[5] + y[5];
572  z[6] = a*x[6] + y[6];
573  z[7] = a*x[7] + y[7];
574  z[8] = a*x[8] + y[8];
575  z[9] = a*x[9] + y[9];
576 
577  z[10] = a*x[10] + y[10];
578  z[11] = a*x[11] + y[11];
579  z[12] = a*x[12] + y[12];
580  z[13] = a*x[13] + y[13];
581  z[14] = a*x[14] + y[14];
582 
583  z[15] = a*x[15] + y[15];
584  z[16] = a*x[16] + y[16];
585  z[17] = a*x[17] + y[17];
586  z[18] = a*x[18] + y[18];
587  z[19] = a*x[19] + y[19];
588 
589  z[20] = a*x[20] + y[20];
590  z[21] = a*x[21] + y[21];
591  z[22] = a*x[22] + y[22];
592  z[23] = a*x[23] + y[23];
593  z[24] = a*x[24] + y[24];
594 }
595 
612  REAL *x,
613  REAL *y,
614  REAL *z)
615 {
616  z[0] = a*x[0] + y[0];
617  z[1] = a*x[1] + y[1];
618  z[2] = a*x[2] + y[2];
619  z[3] = a*x[3] + y[3];
620  z[4] = a*x[4] + y[4];
621  z[5] = a*x[5] + y[5];
622  z[6] = a*x[6] + y[6];
623 
624  z[7] = a*x[7] + y[7];
625  z[8] = a*x[8] + y[8];
626  z[9] = a*x[9] + y[9];
627  z[10] = a*x[10] + y[10];
628  z[11] = a*x[11] + y[11];
629  z[12] = a*x[12] + y[12];
630  z[13] = a*x[13] + y[13];
631 
632  z[14] = a*x[14] + y[14];
633  z[15] = a*x[15] + y[15];
634  z[16] = a*x[16] + y[16];
635  z[17] = a*x[17] + y[17];
636  z[18] = a*x[18] + y[18];
637  z[19] = a*x[19] + y[19];
638  z[20] = a*x[20] + y[20];
639 
640  z[21] = a*x[21] + y[21];
641  z[22] = a*x[22] + y[22];
642  z[23] = a*x[23] + y[23];
643  z[24] = a*x[24] + y[24];
644  z[25] = a*x[25] + y[25];
645  z[26] = a*x[26] + y[26];
646  z[27] = a*x[27] + y[27];
647 
648  z[28] = a*x[28] + y[28];
649  z[29] = a*x[29] + y[29];
650  z[30] = a*x[30] + y[30];
651  z[31] = a*x[31] + y[31];
652  z[32] = a*x[32] + y[32];
653  z[33] = a*x[33] + y[33];
654  z[34] = a*x[34] + y[34];
655 
656  z[35] = a*x[35] + y[35];
657  z[36] = a*x[36] + y[36];
658  z[37] = a*x[37] + y[37];
659  z[38] = a*x[38] + y[38];
660  z[39] = a*x[39] + y[39];
661  z[40] = a*x[40] + y[40];
662  z[41] = a*x[41] + y[41];
663 
664  z[42] = a*x[42] + y[42];
665  z[43] = a*x[43] + y[43];
666  z[44] = a*x[44] + y[44];
667  z[45] = a*x[45] + y[45];
668  z[46] = a*x[46] + y[46];
669  z[47] = a*x[47] + y[47];
670  z[48] = a*x[48] + y[48];
671 }
672 
686  REAL *x,
687  REAL *y)
688 {
689  y[0] += a*x[0];
690  y[1] += a*x[1];
691 
692  y[2] += a*x[2];
693  y[3] += a*x[3];
694 }
695 
709  REAL *x,
710  REAL *y)
711 {
712  y[0] += a*x[0];
713  y[1] += a*x[1];
714  y[2] += a*x[2];
715 
716  y[3] += a*x[3];
717  y[4] += a*x[4];
718  y[5] += a*x[5];
719 
720  y[6] += a*x[6];
721  y[7] += a*x[7];
722  y[8] += a*x[8];
723 }
724 
738  REAL *x,
739  REAL *y)
740 {
741  y[0] += a*x[0];
742  y[1] += a*x[1];
743  y[2] += a*x[2];
744  y[3] += a*x[3];
745  y[4] += a*x[4];
746 
747  y[5] += a*x[5];
748  y[6] += a*x[6];
749  y[7] += a*x[7];
750  y[8] += a*x[8];
751  y[9] += a*x[9];
752 
753  y[10] += a*x[10];
754  y[11] += a*x[11];
755  y[12] += a*x[12];
756  y[13] += a*x[13];
757  y[14] += a*x[14];
758 
759  y[15] += a*x[15];
760  y[16] += a*x[16];
761  y[17] += a*x[17];
762  y[18] += a*x[18];
763  y[19] += a*x[19];
764 
765  y[20] += a*x[20];
766  y[21] += a*x[21];
767  y[22] += a*x[22];
768  y[23] += a*x[23];
769  y[24] += a*x[24];
770 }
771 
785  REAL *x,
786  REAL *y)
787 {
788  y[0] += a*x[0];
789  y[1] += a*x[1];
790  y[2] += a*x[2];
791  y[3] += a*x[3];
792  y[4] += a*x[4];
793  y[5] += a*x[5];
794  y[6] += a*x[6];
795 
796  y[7] += a*x[7];
797  y[8] += a*x[8];
798  y[9] += a*x[9];
799  y[10] += a*x[10];
800  y[11] += a*x[11];
801  y[12] += a*x[12];
802  y[13] += a*x[13];
803 
804  y[14] += a*x[14];
805  y[15] += a*x[15];
806  y[16] += a*x[16];
807  y[17] += a*x[17];
808  y[18] += a*x[18];
809  y[19] += a*x[19];
810  y[20] += a*x[20];
811 
812  y[21] += a*x[21];
813  y[22] += a*x[22];
814  y[23] += a*x[23];
815  y[24] += a*x[24];
816  y[25] += a*x[25];
817  y[26] += a*x[26];
818  y[27] += a*x[27];
819 
820  y[28] += a*x[28];
821  y[29] += a*x[29];
822  y[30] += a*x[30];
823  y[31] += a*x[31];
824  y[32] += a*x[32];
825  y[33] += a*x[33];
826  y[34] += a*x[34];
827 
828  y[35] += a*x[35];
829  y[36] += a*x[36];
830  y[37] += a*x[37];
831  y[38] += a*x[38];
832  y[39] += a*x[39];
833  y[40] += a*x[40];
834  y[41] += a*x[41];
835 
836  y[42] += a*x[42];
837  y[43] += a*x[43];
838  y[44] += a*x[44];
839  y[45] += a*x[45];
840  y[46] += a*x[46];
841  y[47] += a*x[47];
842  y[48] += a*x[48];
843 }
844 
858  REAL *x,
859  REAL *y )
860 {
861  REAL x0,x1;
862  x0=x[0];
863  x1=x[1];
864 
865  y[0] += A[0]*x0 + A[1]*x1;
866  y[1] += A[2]*x0 + A[3]*x1;
867 
868  return;
869 }
870 
884  REAL *x,
885  REAL *y )
886 {
887  REAL x0,x1,x2;
888  x0=x[0];
889  x1=x[1];
890  x2=x[2];
891 
892  y[0] += A[0]*x0 + A[1]*x1 + A[2]*x2;
893  y[1] += A[3]*x0 + A[4]*x1 + A[5]*x2;
894  y[2] += A[6]*x0 + A[7]*x1 + A[8]*x2;
895  return;
896 }
897 
911  REAL *x,
912  REAL *y )
913 {
914  REAL x0,x1,x2,x3,x4;
915  x0=x[0];
916  x1=x[1];
917  x2=x[2];
918  x3=x[3];
919  x4=x[4];
920 
921  y[0] += A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3 + A[4]*x4;
922  y[1] += A[5]*x0 + A[6]*x1 + A[7]*x2 + A[8]*x3 + A[9]*x4;
923  y[2] += A[10]*x0 + A[11]*x1 + A[12]*x2 + A[13]*x3 + A[14]*x4;
924  y[3] += A[15]*x0 + A[16]*x1 + A[17]*x2 + A[18]*x3 + A[19]*x4;
925  y[4] += A[20]*x0 + A[21]*x1 + A[22]*x2 + A[23]*x3 + A[24]*x4;
926  return;
927 }
928 
942  REAL *x,
943  REAL *y)
944 {
945  REAL x0,x1,x2,x3,x4,x5,x6;
946  x0=x[0];
947  x1=x[1];
948  x2=x[2];
949  x3=x[3];
950  x4=x[4];
951  x5=x[5];
952  x6=x[6];
953  y[0] += A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3 + A[4]*x4 + A[5]*x5 + A[6]*x6;
954  y[1] += A[7]*x0 + A[8]*x1 + A[9]*x2 + A[10]*x3 + A[11]*x4 + A[12]*x5 + A[13]*x6;
955  y[2] += A[14]*x0 + A[15]*x1 + A[16]*x2 + A[17]*x3 + A[18]*x4 + A[19]*x5 + A[20]*x6;
956  y[3] += A[21]*x0 + A[22]*x1 + A[23]*x2 + A[24]*x3 + A[25]*x4 + A[26]*x5 + A[27]*x6;
957  y[4] += A[28]*x0 + A[29]*x1 + A[30]*x2 + A[31]*x3 + A[32]*x4 + A[33]*x5 + A[34]*x6;
958  y[5] += A[35]*x0 + A[36]*x1 + A[37]*x2 + A[38]*x3 + A[39]*x4 + A[40]*x5 + A[41]*x6;
959  y[6] += A[42]*x0 + A[43]*x1 + A[44]*x2 + A[45]*x3 + A[46]*x4 + A[47]*x5 + A[48]*x6;
960  return;
961 }
962 
977  REAL *x,
978  REAL *y,
979  const INT n)
980 {
981  switch (n) {
982  case 2:
983  {
984  REAL x0,x1;
985  x0=x[0];x1=x[1];
986  y[0] += A[0]*x0 + A[1]*x1;
987  y[1] += A[2]*x0 + A[3]*x1;
988  break;
989  }
990  case 3:
991  {
992  REAL x0,x1,x2;
993  x0=x[0];x1=x[1];x2=x[2];
994  y[0] += A[0]*x0 + A[1]*x1 + A[2]*x2;
995  y[1] += A[3]*x0 + A[4]*x1 + A[5]*x2;
996  y[2] += A[6]*x0 + A[7]*x1 + A[8]*x2;
997  break;
998  }
999  case 4:
1000  {
1001  REAL x0,x1,x2,x3;
1002  x0=x[0];x1=x[1];x2=x[2];x3=x[3];
1003  y[0] += A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3;
1004  y[1] += A[4]*x0 + A[5]*x1 + A[6]*x2 + A[7]*x3;
1005  y[2] += A[8]*x0 + A[9]*x1 + A[10]*x2 + A[11]*x3;
1006  y[3] += A[12]*x0 + A[13]*x1 +A[14]*x2 + A[15]*x3;
1007  break;
1008  }
1009  case 5:
1010  {
1011  REAL x0,x1,x2,x3,x4;
1012  x0=x[0];x1=x[1];x2=x[2];x3=x[3];x4=x[4];
1013  y[0] += A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3 + A[4]*x4;
1014  y[1] += A[5]*x0 + A[6]*x1 + A[7]*x2 + A[8]*x3 + A[9]*x4;
1015  y[2] += A[10]*x0 + A[11]*x1 + A[12]*x2 + A[13]*x3 + A[14]*x4;
1016  y[3] += A[15]*x0 + A[16]*x1 + A[17]*x2 + A[18]*x3 + A[19]*x4;
1017  y[4] += A[20]*x0 + A[21]*x1 + A[22]*x2 + A[23]*x3 + A[24]*x4;
1018  break;
1019  }
1020  case 6:
1021  {
1022  REAL x0,x1,x2,x3,x4,x5;
1023  x0=x[0];x1=x[1];x2=x[2];x3=x[3];x4=x[4];x5=x[5];
1024  y[0] += A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3 + A[4]*x4 + A[5]*x5;
1025  y[1] += A[6]*x0 + A[7]*x1 + A[8]*x2 + A[9]*x3 + A[10]*x4 + A[11]*x5;
1026  y[2] += A[12]*x0 + A[13]*x1 + A[14]*x2 + A[15]*x3 + A[16]*x4 + A[17]*x5;
1027  y[3] += A[18]*x0 + A[19]*x1 + A[20]*x2 + A[21]*x3 + A[22]*x4 + A[23]*x5;
1028  y[4] += A[24]*x0 + A[25]*x1 + A[26]*x2 + A[27]*x3 + A[28]*x4 + A[29]*x5;
1029  y[5] += A[30]*x0 + A[31]*x1 + A[32]*x2 + A[33]*x3 + A[34]*x4 + A[35]*x5;
1030  break;
1031  }
1032  case 7:
1033  {
1034  REAL x0,x1,x2,x3,x4,x5,x6;
1035  x0=x[0];x1=x[1];x2=x[2];x3=x[3];x4=x[4];x5=x[5];x6=x[6];
1036  y[0] += A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3 + A[4]*x4 + A[5]*x5 + A[6]*x6;
1037  y[1] += A[7]*x0 + A[8]*x1 + A[9]*x2 + A[10]*x3 + A[11]*x4 + A[12]*x5 + A[13]*x6;
1038  y[2] += A[14]*x0 + A[15]*x1 + A[16]*x2 + A[17]*x3 + A[18]*x4 + A[19]*x5 + A[20]*x6;
1039  y[3] += A[21]*x0 + A[22]*x1 + A[23]*x2 + A[24]*x3 + A[25]*x4 + A[26]*x5 + A[27]*x6;
1040  y[4] += A[28]*x0 + A[29]*x1 + A[30]*x2 + A[31]*x3 + A[32]*x4 + A[33]*x5 + A[34]*x6;
1041  y[5] += A[35]*x0 + A[36]*x1 + A[37]*x2 + A[38]*x3 + A[39]*x4 + A[40]*x5 + A[41]*x6;
1042  y[6] += A[42]*x0 + A[43]*x1 + A[44]*x2 + A[45]*x3 + A[46]*x4 + A[47]*x5 + A[48]*x6;
1043  break;
1044  }
1045  default: {
1046  INT i,j,k;
1047 
1048  for (i = 0; i < n; i ++)
1049  {
1050  k = i*n;
1051  for (j = 0; j < n; j ++)
1052  {
1053  y[i] += A[k+j]*x[j];
1054  }
1055  }
1056  break;
1057  }
1058  }
1059 
1060  return;
1061 }
1062 
1078  REAL *x,
1079  REAL *y)
1080 {
1081  REAL x0,x1;
1082  x0=x[0];
1083  x1=x[1];
1084 
1085  y[0] -= A[0]*x0 + A[1]*x1;
1086  y[1] -= A[2]*x0 + A[3]*x1;
1087 
1088  return;
1089 }
1090 
1106  REAL *x,
1107  REAL *y)
1108 {
1109  REAL x0,x1,x2;
1110  x0=x[0];
1111  x1=x[1];
1112  x2=x[2];
1113 
1114  y[0] -= A[0]*x0 + A[1]*x1 + A[2]*x2;
1115  y[1] -= A[3]*x0 + A[4]*x1 + A[5]*x2;
1116  y[2] -= A[6]*x0 + A[7]*x1 + A[8]*x2;
1117 
1118  return;
1119 }
1120 
1136  REAL *x,
1137  REAL *y)
1138 {
1139  REAL x0,x1,x2,x3,x4;
1140  x0=x[0];
1141  x1=x[1];
1142  x2=x[2];
1143  x3=x[3];
1144  x4=x[4];
1145 
1146  y[0] -= A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3 + A[4]*x4;
1147  y[1] -= A[5]*x0 + A[6]*x1 + A[7]*x2 + A[8]*x3 + A[9]*x4;
1148  y[2] -= A[10]*x0 + A[11]*x1 + A[12]*x2 + A[13]*x3 + A[14]*x4;
1149  y[3] -= A[15]*x0 + A[16]*x1 + A[17]*x2 + A[18]*x3 + A[19]*x4;
1150  y[4] -= A[20]*x0 + A[21]*x1 + A[22]*x2 + A[23]*x3 + A[24]*x4;
1151 
1152  return;
1153 }
1154 
1170  REAL *x,
1171  REAL *y)
1172 {
1173  REAL x0,x1,x2,x3,x4,x5,x6;
1174 
1175  x0=x[0];
1176  x1=x[1];
1177  x2=x[2];
1178  x3=x[3];
1179  x4=x[4];
1180  x5=x[5];
1181  x6=x[6];
1182 
1183  y[0] -= A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3 + A[4]*x4 + A[5]*x5 + A[6]*x6;
1184  y[1] -= A[7]*x0 + A[8]*x1 + A[9]*x2 + A[10]*x3 + A[11]*x4 + A[12]*x5 + A[13]*x6;
1185  y[2] -= A[14]*x0 + A[15]*x1 + A[16]*x2 + A[17]*x3 + A[18]*x4 + A[19]*x5 + A[20]*x6;
1186  y[3] -= A[21]*x0 + A[22]*x1 + A[23]*x2 + A[24]*x3 + A[25]*x4 + A[26]*x5 + A[27]*x6;
1187  y[4] -= A[28]*x0 + A[29]*x1 + A[30]*x2 + A[31]*x3 + A[32]*x4 + A[33]*x5 + A[34]*x6;
1188  y[5] -= A[35]*x0 + A[36]*x1 + A[37]*x2 + A[38]*x3 + A[39]*x4 + A[40]*x5 + A[41]*x6;
1189  y[6] -= A[42]*x0 + A[43]*x1 + A[44]*x2 + A[45]*x3 + A[46]*x4 + A[47]*x5 + A[48]*x6;
1190 
1191  return;
1192 }
1193 
1208  REAL *x,
1209  REAL *y,
1210  const INT n)
1211 {
1212  switch (n) {
1213  case 2:
1214  {
1215  REAL x0,x1;
1216  x0=x[0];x1=x[1];
1217  y[0] -= A[0]*x0 + A[1]*x1;
1218  y[1] -= A[2]*x0 + A[3]*x1;
1219  break;
1220  }
1221  case 3:
1222  {
1223  REAL x0,x1,x2;
1224  x0=x[0];x1=x[1];x2=x[2];
1225  y[0] -= A[0]*x0 + A[1]*x1 + A[2]*x2;
1226  y[1] -= A[3]*x0 + A[4]*x1 + A[5]*x2;
1227  y[2] -= A[6]*x0 + A[7]*x1 + A[8]*x2;
1228  break;
1229  }
1230  case 4:
1231  {
1232  REAL x0,x1,x2,x3;
1233  x0=x[0];x1=x[1];x2=x[2];x3=x[3];
1234  y[0] -= A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3;
1235  y[1] -= A[4]*x0 + A[5]*x1 + A[6]*x2 + A[7]*x3;
1236  y[2] -= A[8]*x0 + A[9]*x1 + A[10]*x2 + A[11]*x3;
1237  y[3] -= A[12]*x0 + A[13]*x1 +A[14]*x2 + A[15]*x3;
1238  break;
1239  }
1240  case 5:
1241  {
1242  REAL x0,x1,x2,x3,x4;
1243  x0=x[0];x1=x[1];x2=x[2];x3=x[3];x4=x[4];
1244  y[0] -= A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3 + A[4]*x4;
1245  y[1] -= A[5]*x0 + A[6]*x1 + A[7]*x2 + A[8]*x3 + A[9]*x4;
1246  y[2] -= A[10]*x0 + A[11]*x1 + A[12]*x2 + A[13]*x3 + A[14]*x4;
1247  y[3] -= A[15]*x0 + A[16]*x1 + A[17]*x2 + A[18]*x3 + A[19]*x4;
1248  y[4] -= A[20]*x0 + A[21]*x1 + A[22]*x2 + A[23]*x3 + A[24]*x4;
1249  break;
1250  }
1251  case 6:
1252  {
1253  REAL x0,x1,x2,x3,x4,x5;
1254  x0=x[0];x1=x[1];x2=x[2];x3=x[3];x4=x[4];x5=x[5];
1255  y[0] -= A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3 + A[4]*x4 + A[5]*x5;
1256  y[1] -= A[6]*x0 + A[7]*x1 + A[8]*x2 + A[9]*x3 + A[10]*x4 + A[11]*x5;
1257  y[2] -= A[12]*x0 + A[13]*x1 + A[14]*x2 + A[15]*x3 + A[16]*x4 + A[17]*x5;
1258  y[3] -= A[18]*x0 + A[19]*x1 + A[20]*x2 + A[21]*x3 + A[22]*x4 + A[23]*x5;
1259  y[4] -= A[24]*x0 + A[25]*x1 + A[26]*x2 + A[27]*x3 + A[28]*x4 + A[29]*x5;
1260  y[5] -= A[30]*x0 + A[31]*x1 + A[32]*x2 + A[33]*x3 + A[34]*x4 + A[35]*x5;
1261  break;
1262  }
1263  case 7:
1264  {
1265  REAL x0,x1,x2,x3,x4,x5,x6;
1266  x0=x[0];x1=x[1];x2=x[2];x3=x[3];x4=x[4];x5=x[5];x6=x[6];
1267  y[0] -= A[0]*x0 + A[1]*x1 + A[2]*x2 + A[3]*x3 + A[4]*x4 + A[5]*x5 + A[6]*x6;
1268  y[1] -= A[7]*x0 + A[8]*x1 + A[9]*x2 + A[10]*x3 + A[11]*x4 + A[12]*x5 + A[13]*x6;
1269  y[2] -= A[14]*x0 + A[15]*x1 + A[16]*x2 + A[17]*x3 + A[18]*x4 + A[19]*x5 + A[20]*x6;
1270  y[3] -= A[21]*x0 + A[22]*x1 + A[23]*x2 + A[24]*x3 + A[25]*x4 + A[26]*x5 + A[27]*x6;
1271  y[4] -= A[28]*x0 + A[29]*x1 + A[30]*x2 + A[31]*x3 + A[32]*x4 + A[33]*x5 + A[34]*x6;
1272  y[5] -= A[35]*x0 + A[36]*x1 + A[37]*x2 + A[38]*x3 + A[39]*x4 + A[40]*x5 + A[41]*x6;
1273  y[6] -= A[42]*x0 + A[43]*x1 + A[44]*x2 + A[45]*x3 + A[46]*x4 + A[47]*x5 + A[48]*x6;
1274  break;
1275  }
1276  default: {
1277  INT i,j,k;
1278 
1279  for (i = 0; i < n; i ++) {
1280  k = i*n;
1281  for (j = 0; j < n; j ++) {
1282  y[i] -= A[k+j]*x[j];
1283  }
1284  }
1285  break;
1286  }
1287  }
1288 
1289  return;
1290 }
1291 
1308 void fasp_blas_smat_aAxpby (const REAL alpha,
1309  REAL *A,
1310  REAL *x,
1311  const REAL beta,
1312  REAL *y,
1313  const INT n)
1314 {
1315  INT i,j,k;
1316  REAL tmp = 0.0;
1317 
1318  if (alpha == 0) {
1319  for (i = 0; i < n; i ++) y[i] *= beta;
1320  return;
1321  }
1322 
1323  // y := (beta/alpha)y
1324  tmp = beta / alpha;
1325  if (tmp != 1.0) {
1326  for (i = 0; i < n; i ++) y[i] *= tmp;
1327  }
1328 
1329  // y := y + A*x
1330  for (i = 0; i < n; i ++) {
1331  k = i*n;
1332  for (j = 0; j < n; j ++) {
1333  y[i] += A[k+j]*x[j];
1334  }
1335  }
1336 
1337  // y := alpha*y
1338  if (alpha != 1.0) {
1339  for (i = 0; i < n; i ++) y[i] *= alpha;
1340  }
1341 }
1342 
1359  REAL *x,
1360  REAL *y)
1361 {
1362  y[0] -= A[3]*x[0];
1363 
1364  return;
1365 }
1366 
1383  REAL *x,
1384  REAL *y)
1385 {
1386  REAL x0,x1;
1387  x0=x[0];
1388  x1=x[1];
1389  y[0] -= A[4]*x0 + A[5]*x1;
1390  y[1] -= A[7]*x0 + A[8]*x1;
1391 
1392  return;
1393 }
1394 
1411  REAL *x,
1412  REAL *y)
1413 {
1414  REAL x0,x1,x2,x3;
1415 
1416  x0=x[0];
1417  x1=x[1];
1418  x2=x[2];
1419  x3=x[3];
1420 
1421  y[0] -= A[6]*x0 + A[7]*x1 + A[8]*x2 + A[9]*x3;
1422  y[1] -= A[11]*x0 + A[12]*x1 + A[13]*x2 + A[14]*x3;
1423  y[2] -= A[16]*x0 + A[17]*x1 + A[18]*x2 + A[19]*x3;
1424  y[3] -= A[21]*x0 + A[22]*x1 + A[23]*x2 + A[24]*x3;
1425 
1426  return;
1427 }
1428 
1445  REAL *x,
1446  REAL *y)
1447 {
1448  REAL x0,x1,x2,x3,x4,x5;
1449 
1450  x0=x[0];
1451  x1=x[1];
1452  x2=x[2];
1453  x3=x[3];
1454  x4=x[4];
1455  x5=x[5];
1456 
1457  y[0] -= A[8]*x0 + A[9]*x1 + A[10]*x2 + A[11]*x3 + A[12]*x4 + A[13]*x5;
1458  y[1] -= A[15]*x0 + A[16]*x1 + A[17]*x2 + A[18]*x3 + A[19]*x4 + A[20]*x5;
1459  y[2] -= A[22]*x0 + A[23]*x1 + A[24]*x2 + A[25]*x3 + A[26]*x4 + A[27]*x5;
1460  y[3] -= A[29]*x0 + A[30]*x1 + A[31]*x2 + A[32]*x3 + A[33]*x4 + A[34]*x5;
1461  y[4] -= A[36]*x0 + A[37]*x1 + A[38]*x2 + A[39]*x3 + A[40]*x4 + A[41]*x5;
1462  y[5] -= A[43]*x0 + A[44]*x1 + A[45]*x2 + A[46]*x3 + A[47]*x4 + A[48]*x5;
1463 
1464  return;
1465 }
1466 
1483  REAL *x,
1484  REAL *y,
1485  const INT n)
1486 {
1487  switch (n) {
1488  case 2:
1489  y[0] -= A[3]*x[0];
1490  break;
1491 
1492  case 3:
1493  {
1494  REAL x0,x1;
1495  x0=x[0];x1=x[1];
1496  y[0] -= A[4]*x0 + A[5]*x1;
1497  y[1] -= A[7]*x0 + A[8]*x1;
1498  break;
1499  }
1500  case 5:
1501  {
1502  REAL x0,x1,x2,x3;
1503  x0=x[0];x1=x[1];x2=x[2];x3=x[3];
1504  y[0] -= A[6]*x0 + A[7]*x1 + A[8]*x2 + A[9]*x3;
1505  y[1] -= A[11]*x0 + A[12]*x1 + A[13]*x2 + A[14]*x3;
1506  y[2] -= A[16]*x0 + A[17]*x1 + A[18]*x2 + A[19]*x3;
1507  y[3] -= A[21]*x0 + A[22]*x1 + A[23]*x2 + A[24]*x3;
1508  break;
1509  }
1510  case 7:
1511  {
1512  REAL x0,x1,x2,x3,x4,x5;
1513  x0=x[0];x1=x[1];x2=x[2];x3=x[3];x4=x[4];x5=x[5];
1514  y[0] -= A[8]*x0 + A[9]*x1 + A[10]*x2 + A[11]*x3 + A[12]*x4 + A[13]*x5;
1515  y[1] -= A[15]*x0 + A[16]*x1 + A[17]*x2 + A[18]*x3 + A[19]*x4 + A[20]*x5;
1516  y[2] -= A[22]*x0 + A[23]*x1 + A[24]*x2 + A[25]*x3 + A[26]*x4 + A[27]*x5;
1517  y[3] -= A[29]*x0 + A[30]*x1 + A[31]*x2 + A[32]*x3 + A[33]*x4 + A[34]*x5;
1518  y[4] -= A[36]*x0 + A[37]*x1 + A[38]*x2 + A[39]*x3 + A[40]*x4 + A[41]*x5;
1519  y[5] -= A[43]*x0 + A[44]*x1 + A[45]*x2 + A[46]*x3 + A[47]*x4 + A[48]*x5;
1520  break;
1521  }
1522  default: {
1523  INT i,j,k;
1524 
1525  for (i = 1; i < n; i ++) {
1526  k = i*n;
1527  for (j = 1; j < n; j ++) {
1528  y[i-1] -= A[k+j]*x[j-1];
1529  }
1530  }
1531  break;
1532  }
1533  }
1534 
1535  return;
1536 }
1537 
1538 
1539 
1540 
1541 /*---------------------------------*/
1542 /*-- End of File --*/
1543 /*---------------------------------*/
void fasp_blas_smat_axm(REAL *a, const INT n, const REAL alpha)
Compute alpha*a, store in a.
Definition: blas_smat.c:26
void fasp_blas_smat_mul_nc2(REAL *a, REAL *b, REAL *c)
Compute the matrix product of two 2* matrices a and b, stored in c.
Definition: blas_smat.c:233
void fasp_blas_smat_ymAx_ns7(REAL *A, REAL *x, REAL *y)
Compute ys := ys - Ass*xs, where 'A' is a 7*7 dense matrix, Ass is its saturaton part 6*6...
Definition: blas_smat.c:1444
void fasp_blas_smat_ypAx(REAL *A, REAL *x, REAL *y, const INT n)
Compute y := y + Ax, where 'A' is a n*n dense matrix.
Definition: blas_smat.c:976
#define REAL
Definition: fasp.h:67
void fasp_blas_smat_ymAx(REAL *A, REAL *x, REAL *y, const INT n)
Compute y := y - Ax, where 'A' is a n*n dense matrix.
Definition: blas_smat.c:1207
void fasp_blas_array_axpyz_nc3(const REAL a, REAL *x, REAL *y, REAL *z)
z = a*x + y
Definition: blas_smat.c:527
void fasp_blas_smat_ymAx_ns2(REAL *A, REAL *x, REAL *y)
Compute ys := ys - Ass*xs, where 'A' is a 2*2 dense matrix, Ass is its saturaton part 1*1...
Definition: blas_smat.c:1358
void fasp_blas_smat_mxv_nc3(REAL *a, REAL *b, REAL *c)
Compute the product of a 3*3 matrix a and a array b, stored in c.
Definition: blas_smat.c:105
void fasp_blas_array_axpyz_nc2(const REAL a, REAL *x, REAL *y, REAL *z)
z = a*x + y
Definition: blas_smat.c:500
void fasp_blas_array_axpy_nc3(const REAL a, REAL *x, REAL *y)
y = a*x + y, the length of x and y is 3
Definition: blas_smat.c:708
void fasp_blas_smat_mul_nc5(REAL *a, REAL *b, REAL *c)
Compute the matrix product of two 5*5 matrices a and b, stored in c.
Definition: blas_smat.c:299
void fasp_blas_array_axpy_nc2(const REAL a, REAL *x, REAL *y)
y = a*x + y, the length of x and y is 2
Definition: blas_smat.c:685
void fasp_blas_smat_aAxpby(const REAL alpha, REAL *A, REAL *x, const REAL beta, REAL *y, const INT n)
Compute y:=alpha*A*x + beta*y.
Definition: blas_smat.c:1308
void fasp_blas_smat_ypAx_nc7(REAL *A, REAL *x, REAL *y)
Compute y := y + Ax, where 'A' is a 7*7 dense matrix.
Definition: blas_smat.c:941
void fasp_blas_smat_ymAx_ns3(REAL *A, REAL *x, REAL *y)
Compute ys := ys - Ass*xs, where 'A' is a 3*3 dense matrix, Ass is its saturaton part 2*2...
Definition: blas_smat.c:1382
void fasp_blas_smat_mul(REAL *a, REAL *b, REAL *c, const INT n)
Compute the matrix product of two small full matrices a and b, stored in c.
Definition: blas_smat.c:448
#define INT
Definition: fasp.h:64
void fasp_blas_smat_ypAx_nc3(REAL *A, REAL *x, REAL *y)
Compute y := y + Ax, where 'A' is a 3*3 dense matrix.
Definition: blas_smat.c:883
void fasp_blas_smat_mul_nc3(REAL *a, REAL *b, REAL *c)
Compute the matrix product of two 3*3 matrices a and b, stored in c.
Definition: blas_smat.c:262
void fasp_blas_smat_mxv_nc7(REAL *a, REAL *b, REAL *c)
Compute the product of a 7*7 matrix a and a array b, stored in c.
Definition: blas_smat.c:154
Main header file for FASP.
void fasp_blas_smat_ypAx_nc2(REAL *A, REAL *x, REAL *y)
Compute y := y + Ax, where 'A' is a 2*2 dense matrix.
Definition: blas_smat.c:857
void fasp_blas_array_axpy_nc7(const REAL a, REAL *x, REAL *y)
y = a*x + y, the length of x and y is 7
Definition: blas_smat.c:784
void fasp_blas_smat_ymAx_ns(REAL *A, REAL *x, REAL *y, const INT n)
Compute ys := ys - Ass*xs, where 'A' is a n*n dense matrix, Ass is its saturaton part (n-1)*(n-1)...
Definition: blas_smat.c:1482
void fasp_blas_smat_ymAx_nc3(REAL *A, REAL *x, REAL *y)
Compute y := y - Ax, where 'A' is a n*n dense matrix.
Definition: blas_smat.c:1105
void fasp_blas_smat_ymAx_nc2(REAL *A, REAL *x, REAL *y)
Compute y := y - Ax, where 'A' is a n*n dense matrix.
Definition: blas_smat.c:1077
void fasp_blas_smat_mul_nc7(REAL *a, REAL *b, REAL *c)
Compute the matrix product of two 7*7 matrices a and b, stored in c.
Definition: blas_smat.c:358
void fasp_blas_smat_ymAx_nc5(REAL *A, REAL *x, REAL *y)
Compute y := y - Ax, where 'A' is a n*n dense matrix.
Definition: blas_smat.c:1135
void fasp_blas_smat_ypAx_nc5(REAL *A, REAL *x, REAL *y)
Compute y := y + Ax, where 'A' is a 5*5 dense matrix.
Definition: blas_smat.c:910
void fasp_blas_array_axpyz_nc5(const REAL a, REAL *x, REAL *y, REAL *z)
z = a*x + y
Definition: blas_smat.c:560
void fasp_blas_smat_ymAx_nc7(REAL *A, REAL *x, REAL *y)
Compute y := y - Ax, where 'A' is a 7*7 dense matrix.
Definition: blas_smat.c:1169
void fasp_blas_array_axpyz_nc7(const REAL a, REAL *x, REAL *y, REAL *z)
z = a*x + y
Definition: blas_smat.c:611
void fasp_blas_smat_mxv_nc2(REAL *a, REAL *b, REAL *c)
Compute the product of a 2*2 matrix a and a array b, stored in c.
Definition: blas_smat.c:83
void fasp_blas_smat_ymAx_ns5(REAL *A, REAL *x, REAL *y)
Compute ys := ys - Ass*xs, where 'A' is a 5*5 dense matrix, Ass is its saturaton part 4*4...
Definition: blas_smat.c:1410
void fasp_blas_smat_mxv_nc5(REAL *a, REAL *b, REAL *c)
Compute the product of a 5*5 matrix a and a array b, stored in c.
Definition: blas_smat.c:128
void fasp_blas_array_axpy_nc5(const REAL a, REAL *x, REAL *y)
y = a*x + y, the length of x and y is 5
Definition: blas_smat.c:737
void fasp_blas_smat_add(REAL *a, REAL *b, const INT n, const REAL alpha, const REAL beta, REAL *c)
Compute c = alpha*a + beta*b.
Definition: blas_smat.c:54
void fasp_blas_smat_mxv(REAL *a, REAL *b, REAL *c, const INT n)
Compute the product of a small full matrix a and a array b, stored in c.
Definition: blas_smat.c:183