Go to the documentation of this file.00001 #include "cs.h"
00002
00003 int cs_dupl (cs *A)
00004 {
00005 int i, j, p, q, nz = 0, n, m, *Ap, *Ai, *w ;
00006 double *Ax ;
00007 if (!CS_CSC (A)) return (0) ;
00008 m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
00009 w = cs_malloc (m, sizeof (int)) ;
00010 if (!w) return (0) ;
00011 for (i = 0 ; i < m ; i++) w [i] = -1 ;
00012 for (j = 0 ; j < n ; j++)
00013 {
00014 q = nz ;
00015 for (p = Ap [j] ; p < Ap [j+1] ; p++)
00016 {
00017 i = Ai [p] ;
00018 if (w [i] >= q)
00019 {
00020 Ax [w [i]] += Ax [p] ;
00021 }
00022 else
00023 {
00024 w [i] = nz ;
00025 Ai [nz] = i ;
00026 Ax [nz++] = Ax [p] ;
00027 }
00028 }
00029 Ap [j] = q ;
00030 }
00031 Ap [n] = nz ;
00032 cs_free (w) ;
00033 return (cs_sprealloc (A, 0)) ;
00034 }