-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathit_jacobi.c
More file actions
33 lines (26 loc) · 1.09 KB
/
it_jacobi.c
File metadata and controls
33 lines (26 loc) · 1.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "common.h"
#include "blas.h"
void it_jacobi(int *ia, int *ja, real_type *a,int nnzA, pdata *prec_data, real_type *vec_in, real_type *vec_out){
int n = prec_data->n;
/* vec_out = v.*vec_in; */
int k = prec_data->k;
real_type one = 1.0;
real_type zero = 0.0;
// vec_vec(n, prec_data->d_r, vec_in, vec_out);
vec_zero(n, vec_out);
for (int i = 0; i < k; ++i) {
/* vec_out = (v).*(vec_in - U*vec_out-L*vec_out); */
/* aux_vec1 = L*vec_out */
csr_matvec(n, prec_data->lnnz, prec_data->lia, prec_data->lja, prec_data->la, vec_out, prec_data->aux_vec1, &one, &zero, "L");
/* aux_vec2=U*vec_out */
csr_matvec(n, prec_data->unnz, prec_data->uia, prec_data->uja, prec_data->ua, vec_out, prec_data->aux_vec2, &one, &zero, "U");
/* aux_vec2 += aux_vec1; */
axpy(n, (1.0f), prec_data->aux_vec1, prec_data->aux_vec2);
/* vec_out = vec_in; */
vec_copy(n, vec_in, vec_out);
/* vec_out = vec_out + (-1)*aux_vec1' */
axpy(n, -1.0f, prec_data->aux_vec2, vec_out);
/*multiply by D^{-1} */
vec_vec(n, vec_out, prec_data->d_r, vec_out);
}
}