code: public static void multAdd(DMatrixSparseCSC A ,
                                 double b[] , int offsetB ,
                                 double c[] , int offsetC )
      {
          if( b.length-offsetB < A.numCols)
              throw new IllegalArgumentException("Length of 'b' isn't long enough");
          if( c.length-offsetC < A.numRows)
              throw new IllegalArgumentException("Length of 'c' isn't long enough");
  
          for (int k = 0; k < A.numCols; k++) {
              int idx0 = A.col_idx[k  ];
              int idx1 = A.col_idx[k+1];
  
              for (int indexA = idx0; indexA < idx1; indexA++) {
                  c[offsetC+A.nz_rows[indexA]] += A.nz_values[indexA]*b[offsetB+k];
              }
          }
      }
docs: c = c + A*b
  
  @param A (Input) Matrix
  @param b (Input) vector
  @param offsetB (Input) first index in vector b
  @param c (Output) vector
  @param offsetC (Output) first index in vector c