16#include "fasp_functs.h"
42 INT i, j, istart, idiag, ip1start;
43 REAL h0, h1, r, c, s, tempi, tempip1, sum;
45 memset(&work, 0x0,
sizeof(
REAL)*Hsize);
48 for ( i=0; i<Hsize-1; ++i ) {
50 ip1start = H->
IA[i+1];
51 if (i==0) idiag = istart;
52 else idiag = istart+1;
55 h1 = H->
val[H->
IA[i+1]];
56 r = sqrt(h0*h0+h1*h1);
59 for ( j=idiag; j<ip1start; ++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;
66 tempi = c*work[i]+s*work[i+1];
67 tempip1 = c*work[i+1]-s*work[i];
69 work[i] = tempi; work[i+1]=tempip1;
72 for ( i = Hsize-2; i >= 0; --i ) {
75 if (i==0) idiag = istart;
76 else idiag = istart+1;
78 for ( j=Hsize-2; j>i; --j ) sum-=H->
val[idiag+j-i]*y->
val[j];
80 y->
val[i] = sum/H->
val[idiag];
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|.
Main header file for the FASP project.
Sparse matrix of REAL type in CSR format.
REAL * val
nonzero entries of A
INT row
row number of matrix A, m
INT * IA
integer array of row pointers, the size is m+1
Vector with n entries of REAL type.
REAL * val
actual vector entries