Fast Auxiliary Space Preconditioning 2.7.7 Aug/28/2022
Loading...
Searching...
No Matches
AuxGivens.c
Go to the documentation of this file.
1
13#include <math.h>
14
15#include "fasp.h"
16#include "fasp_functs.h"
17
18/*---------------------------------*/
19/*-- Public Functions --*/
20/*---------------------------------*/
21
36void fasp_aux_givens (const REAL beta,
37 const dCSRmat *H,
38 dvector *y,
39 REAL *work)
40{
41 const INT Hsize = H->row;
42 INT i, j, istart, idiag, ip1start;
43 REAL h0, h1, r, c, s, tempi, tempip1, sum;
44
45 memset(&work, 0x0, sizeof(REAL)*Hsize);
46 work[0] = beta;
47
48 for ( i=0; i<Hsize-1; ++i ) {
49 istart = H->IA[i];
50 ip1start = H->IA[i+1];
51 if (i==0) idiag = istart;
52 else idiag = istart+1;
53
54 h0 = H->val[idiag]; // h0=H[i][i]
55 h1 = H->val[H->IA[i+1]]; // h1=H[i+1][i]
56 r = sqrt(h0*h0+h1*h1);
57 c = h0/r; s = h1/r;
58
59 for ( j=idiag; j<ip1start; ++j ) {
60 tempi = H->val[j];
61 tempip1 = H->val[ip1start+(j-idiag)];
62 H->val[j] = c*tempi+s*tempip1;
63 H->val[ip1start+(j-idiag)] = c*tempip1-s*tempi;
64 }
65
66 tempi = c*work[i]+s*work[i+1];
67 tempip1 = c*work[i+1]-s*work[i];
68
69 work[i] = tempi; work[i+1]=tempip1;
70 }
71
72 for ( i = Hsize-2; i >= 0; --i ) {
73 sum = work[i];
74 istart = H->IA[i];
75 if (i==0) idiag = istart;
76 else idiag = istart+1;
77
78 for ( j=Hsize-2; j>i; --j ) sum-=H->val[idiag+j-i]*y->val[j];
79
80 y->val[i] = sum/H->val[idiag];
81 }
82
83}
84
85/*---------------------------------*/
86/*-- End of File --*/
87/*---------------------------------*/
void fasp_aux_givens(const REAL beta, const dCSRmat *H, dvector *y, REAL *work)
Perform Givens rotations to compute y |beta*e_1- H*y|.
Definition: AuxGivens.c:36
Main header file for the FASP project.
#define REAL
Definition: fasp.h:75
#define INT
Definition: fasp.h:72
Sparse matrix of REAL type in CSR format.
Definition: fasp.h:151
REAL * val
nonzero entries of A
Definition: fasp.h:169
INT row
row number of matrix A, m
Definition: fasp.h:154
INT * IA
integer array of row pointers, the size is m+1
Definition: fasp.h:163
Vector with n entries of REAL type.
Definition: fasp.h:354
REAL * val
actual vector entries
Definition: fasp.h:360