This function is only used to multiply untransposed matrices.
u[i] = u[i] - uij *v[j][i];
}
}
- SparseMatrix_multiply_vector(A, u, &vv, FALSE);
+ SparseMatrix_multiply_vector(A, u, &vv);
unorm = vector_product(n, vv, vv);/* ||u||^2 */
unorm = sqrt(unorm);
*/
if (!*cA) goto RETURN;
- SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt, FALSE);
+ SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt);
*R = SparseMatrix_divide_row_by_degree(*R);
SparseMatrix_set_symmetric(*cA);
SparseMatrix_set_pattern_symmetric(*cA);
*cA = SparseMatrix_multiply(B, *P);
*/
if (!*cA) goto RETURN;
- SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt, FALSE);
+ SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt);
*R = SparseMatrix_divide_row_by_degree(*R);
SparseMatrix_set_symmetric(*cA);
SparseMatrix_set_pattern_symmetric(*cA);
*R = SparseMatrix_transpose(*P);
*cA = SparseMatrix_multiply3(*R, A, *P);
if (!*cA) goto RETURN;
- SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt, FALSE);
+ SparseMatrix_multiply_vector(*R, node_wgt, cnode_wgt);
SparseMatrix_set_symmetric(*cA);
SparseMatrix_set_pattern_symmetric(*cA);
*cA = SparseMatrix_remove_diagonal(*cA);
double xsum = 0.;
int m = A->m, i;
- SparseMatrix_multiply_vector(A, x, &y, FALSE);
+ SparseMatrix_multiply_vector(A, x, &y);
/* alpha*V*x */
for (i = 0; i < m; i++) xsum += x[i];
static double *Operator_matmul_apply(Operator o, double *x, double *y){
SparseMatrix A = (SparseMatrix) o->data;
- SparseMatrix_multiply_vector(A, x, &y, FALSE);
+ SparseMatrix_multiply_vector(A, x, &y);
return y;
}
SparseMatrix_multiply_dense1(A, v, res, dim);
}
-void SparseMatrix_multiply_vector(SparseMatrix A, double *v, double **res, int transposed){
+void SparseMatrix_multiply_vector(SparseMatrix A, double *v, double **res) {
/* A v or A^T v. Real only for now. */
- int i, j, *ia, *ja, n, m;
+ int i, j, *ia, *ja, m;
double *a, *u = NULL;
int *ai;
assert(A->format == FORMAT_CSR);
ia = A->ia;
ja = A->ja;
m = A->m;
- n = A->n;
u = *res;
switch (A->type){
case MATRIX_TYPE_REAL:
a = (double*) A->a;
if (v){
- if (!transposed){
- if (!u) u = MALLOC(sizeof(double)*((size_t)m));
- for (i = 0; i < m; i++){
- u[i] = 0.;
- for (j = ia[i]; j < ia[i+1]; j++){
- u[i] += a[j]*v[ja[j]];
- }
- }
- } else {
- if (!u) u = MALLOC(sizeof(double)*((size_t)n));
- for (i = 0; i < n; i++) u[i] = 0.;
- for (i = 0; i < m; i++){
- for (j = ia[i]; j < ia[i+1]; j++){
- u[ja[j]] += a[j]*v[i];
- }
+ if (!u) u = MALLOC(sizeof(double)*((size_t)m));
+ for (i = 0; i < m; i++){
+ u[i] = 0.;
+ for (j = ia[i]; j < ia[i+1]; j++){
+ u[i] += a[j]*v[ja[j]];
}
}
} else {
/* v is assumed to be all 1's */
- if (!transposed){
- if (!u) u = MALLOC(sizeof(double)*((size_t)m));
- for (i = 0; i < m; i++){
- u[i] = 0.;
- for (j = ia[i]; j < ia[i+1]; j++){
- u[i] += a[j];
- }
- }
- } else {
- if (!u) u = MALLOC(sizeof(double)*((size_t)n));
- for (i = 0; i < n; i++) u[i] = 0.;
- for (i = 0; i < m; i++){
- for (j = ia[i]; j < ia[i+1]; j++){
- u[ja[j]] += a[j];
- }
+ if (!u) u = MALLOC(sizeof(double)*((size_t)m));
+ for (i = 0; i < m; i++){
+ u[i] = 0.;
+ for (j = ia[i]; j < ia[i+1]; j++){
+ u[i] += a[j];
}
}
}
case MATRIX_TYPE_INTEGER:
ai = (int*) A->a;
if (v){
- if (!transposed){
- if (!u) u = MALLOC(sizeof(double)*((size_t)m));
- for (i = 0; i < m; i++){
- u[i] = 0.;
- for (j = ia[i]; j < ia[i+1]; j++){
- u[i] += ai[j]*v[ja[j]];
- }
- }
- } else {
- if (!u) u = MALLOC(sizeof(double)*((size_t)n));
- for (i = 0; i < n; i++) u[i] = 0.;
- for (i = 0; i < m; i++){
- for (j = ia[i]; j < ia[i+1]; j++){
- u[ja[j]] += ai[j]*v[i];
- }
+ if (!u) u = MALLOC(sizeof(double)*((size_t)m));
+ for (i = 0; i < m; i++){
+ u[i] = 0.;
+ for (j = ia[i]; j < ia[i+1]; j++){
+ u[i] += ai[j]*v[ja[j]];
}
}
} else {
/* v is assumed to be all 1's */
- if (!transposed){
- if (!u) u = MALLOC(sizeof(double)*((size_t)m));
- for (i = 0; i < m; i++){
- u[i] = 0.;
- for (j = ia[i]; j < ia[i+1]; j++){
- u[i] += ai[j];
- }
- }
- } else {
- if (!u) u = MALLOC(sizeof(double)*((size_t)n));
- for (i = 0; i < n; i++) u[i] = 0.;
- for (i = 0; i < m; i++){
- for (j = ia[i]; j < ia[i+1]; j++){
- u[ja[j]] += ai[j];
- }
+ if (!u) u = MALLOC(sizeof(double)*((size_t)m));
+ for (i = 0; i < m; i++){
+ u[i] = 0.;
+ for (j = ia[i]; j < ia[i+1]; j++){
+ u[i] += ai[j];
}
}
}
SparseMatrix SparseMatrix_symmetrize(SparseMatrix A,
bool pattern_symmetric_only);
SparseMatrix SparseMatrix_symmetrize_nodiag(SparseMatrix A);
-void SparseMatrix_multiply_vector(SparseMatrix A, double *v, double **res, int transposed);/* if v = NULL, v is assumed to be {1,1,...,1}*/
+void SparseMatrix_multiply_vector(SparseMatrix A, double *v, double **res);/* if v = NULL, v is assumed to be {1,1,...,1}*/
SparseMatrix SparseMatrix_remove_diagonal(SparseMatrix A);
SparseMatrix SparseMatrix_remove_upper(SparseMatrix A);/* remove diag and upper diag */
SparseMatrix SparseMatrix_divide_row_by_degree(SparseMatrix A);
while (cgrid->prev){
double *v = NULL;
P = cgrid->prev->P;
- SparseMatrix_multiply_vector(P, u, &v, FALSE);
+ SparseMatrix_multiply_vector(P, u, &v);
free(u);
u = v;
cgrid = cgrid->prev;
while (cgrid->prev){
double *v = NULL;
P = cgrid->prev->P;
- SparseMatrix_multiply_vector(P, u, &v, FALSE);
+ SparseMatrix_multiply_vector(P, u, &v);
free(u);
u = v;
cgrid = cgrid->prev;