Skip to content
Snippets Groups Projects
cs_scatter.c 901 B
Newer Older
  • Learn to ignore specific revisions
  • Lubomir Riha's avatar
    Lubomir Riha committed
    #include "cs.h"
    /* x = x + beta * A(:,j), where x is a dense vector and A(:,j) is sparse */
    CS_INT cs_scatter (const cs *A, CS_INT j, CS_ENTRY beta, CS_INT *w, CS_ENTRY *x, CS_INT mark,
        cs *C, CS_INT nz)
    {
        CS_INT i, p, *Ap, *Ai, *Ci ;
        CS_ENTRY *Ax ;
        if (!CS_CSC (A) || !w || !CS_CSC (C)) return (-1) ;     /* check inputs */
        Ap = A->p ; Ai = A->i ; Ax = A->x ; Ci = C->i ;
        for (p = Ap [j] ; p < Ap [j+1] ; p++)
        {
            i = Ai [p] ;                            /* A(i,j) is nonzero */
            if (w [i] < mark)
            {
                w [i] = mark ;                      /* i is new entry in column j */
                Ci [nz++] = i ;                     /* add i to pattern of C(:,j) */
                if (x) x [i] = beta * Ax [p] ;      /* x(i) = beta*A(i,j) */
            }
            else if (x) x [i] += beta * Ax [p] ;    /* i exists in C(:,j) already */
        }
        return (nz) ;
    }