All pastes #69787 Raw Edit

Something

public c v1 · immutable
#69787 ·published 2006-06-23 12:45 UTC
rendered paste body
#include "Laplacian.h"sparse_matrix_arr* Elad_Laplacian( int *fa , int nf , int nv ){        int i , j , t1 , t2 , nnz;        sparse_matrix_arr *lplcn;        sparse_matrix_lst *temp = allocate_sparse_matrix_lst(nv);        cell_t *cell;        nnz = nv;        // Initialize the temp sml.        for ( i = 0 ; i < nv ; i++ )        {                cell = create_cell_t( i , i , 0.0 );                insert_NEW_cell_into_matrix( cell, temp );        }        // Shape the temp sml into the desired Laplacian matrix thingie thing.        for ( i = 0 ; i < nv ; i++ )                for ( j = 0 ; j < (nf*3) ; j += 3 )                        if ( fa[j+0] == i || fa[j+1] == i || fa[j+2] == i )                        {                                t1 = ( fa[j+0] != i ) ? j+0 : j+1;                                t2 = ( fa[j+2] != i ) ? j+2 : j+1;                                if ( is_zero( i , fa[t1] , temp ) )                                {                                        cell = create_cell_t(i,fa[t1],-1.0);                                        insert_NEW_cell_into_matrix( cell, temp);                                        increment_non_zero_element(i,i,temp);                                        nnz++;                                }                                if ( is_zero( i , fa[t2] , temp ) )                                {                                        cell = create_cell_t(i,fa[t2],-1.0);                                        insert_NEW_cell_into_matrix( cell, temp);                                        increment_non_zero_element(i,i,temp);                                        nnz++;                                }                        }        lplcn = allocate_sparse_matrix_arr(nv,nnz);        sml_to_sma(temp,lplcn);        free_sparse_matrix_lst(temp);        return lplcn;}void sml_to_sma( sparse_matrix_lst *source , sparse_matrix_arr *target ){        int inserted = 0 , j = 0 , previously;        cell_t *cell;        target->colptr[0] = 0;        while ( j < source->n )        {                cell = source->cols[j++];                previously = inserted;                while ( cell != NULL )                {                        target->values[inserted] = cell->value;                        target->rowind[inserted] = cell->rowind;                        cell = cell->col_next;                        inserted++;                }                target->colptr[j] = target->colptr[j-1] + inserted - previously;        }}