BASKER_INLINE void BaskerMatrix<Int,Entry,Exe_Space>::print() { std::cout << "\n Matrix Print: \n Label: " << label.c_str() << " sr: " << srow << " sc: " << scol << "\n ncol: " << ncol << " nnz: " << nnz << std::endl; std::cout << " col_ptr: "; for(Int i=0; i < ncol+1; i++) { std::cout << col_ptr(i) << " , "; } std::cout << "\n row_idx: "; for(Int i=0; i < nnz; i++) { std::cout << row_idx(i) << " , "; } std::cout << "\n val: "; for(Int i=0; i < nnz; i++) { std::cout << val(i) << " , "; } std::cout << "\n END PRINT " << std::endl; }//end print()
BASKER_INLINE int BaskerMatrix<Int,Entry,Exe_Space>::fill() { if(v_fill == BASKER_TRUE) return -1; for(Int i = 0; i < ncol+1; i++) { col_ptr(i) = 0; } for(Int i = 0; i < nnz; i++) { row_idx(i) = 0; } for(Int i = 0; i < nnz; i++) { val(i) = 0; } //#ifdef BASKER_INC_LVL if(inc_lvl_flg == BASKER_TRUE) { for(Int i = 0; i < nnz; i++) { inc_lvl(i) = 0; } } //#endif v_fill = BASKER_TRUE; return 0; }
BASKER_INLINE void BaskerMatrix<Int,Entry,Exe_Space>::print() { printf("\n Matrix Print: \n Label: %s sr: %d sc: %d \n", label.c_str(), srow, scol); printf("ncol: %d nnz: %d \n", ncol, nnz); printf(" col_ptr: "); for(Int i=0; i < ncol+1; i++) { printf(" %d , ", col_ptr(i)); } printf("\n row_idx: "); for(Int i=0; i < nnz; i++) { printf(" %d , ", row_idx(i)); } printf("\n val: "); for(Int i=0; i < nnz; i++) { printf(" %e , " , val(i)); } printf("\n END PRINT \n"); }//end print()
Sudoku::Sudoku(string p, bool v) { valid = v; if(valid) { if(p.size() != 81) throw Error(Error::bad_parse); for(int i=0; i<81; i++) { if(!isdigit(p[i])) throw Error(Error::bad_parse); string row_idx(1, row[i/9]); string col_idx(1, col[i%9]); string idx = row_idx + col_idx; puzzle[idx] = p[i] - '0'; } } }
BASKER_INLINE void BaskerMatrix<Int, Entry, Exe_Space>::init_vectors ( Int _m, Int _n, Int _nnz ) { nrow = _m; ncol = _n; nnz = _nnz; mnnz = _nnz; if(ncol >= 0) { BASKER_ASSERT((ncol+1)>0, "matrix init_vector ncol"); MALLOC_INT_1DARRAY(col_ptr,ncol+1); } if(nnz > 0) { BASKER_ASSERT(nnz > 0, "matrix init_vector nnz"); MALLOC_INT_1DARRAY(row_idx,nnz); MALLOC_ENTRY_1DARRAY(val,nnz); #ifdef BASKER_INC_LVL MALLOC_INT_1DARRAY(inc_lvl, nnz); #endif } else if(nnz==0) { BASKER_ASSERT((nnz+1)>0, "nnz+1 init_vector "); MALLOC_INT_1DARRAY(row_idx, nnz+1); row_idx(0) = (Int) 0; MALLOC_ENTRY_1DARRAY(val, nnz+1); val(0) = (Entry) 0; #ifdef BASKER_INC_LVL MALLOC_INT_1DARRAY(inc_lvl, nnz+1); #endif } }//end init_vectors(Int, Int, Int)
void Sudoku::print() { cout << "-------------------------" << endl; for(int i=0; i<9; i++) { cout << "| "; for(int j=0; j<9; j++) { string row_idx(1, row[i]); string col_idx(1, col[j]); int val = puzzle[row_idx + col_idx]; if(val == 0) cout << "."; else cout << val; if(j!=8 && (j+1)%3==0) cout << " | "; else cout << " "; } cout << "|" << endl; if(i!=8 && (i+1)%3==0) cout << "--------+-------+--------" << endl; } cout << "-------------------------" << endl; }
BASKER_INLINE void BaskerMatrix<Int,Entry,Exe_Space>::convert2D ( BASKER_MATRIX &M, BASKER_BOOL alloc, Int kid ) { if(nnz == 0) { for(Int i = 0; i < ncol+1; i++) { col_ptr(i) = 0; } MALLOC_INT_1DARRAY(row_idx, 1); row_idx(0) = (Int) 0; MALLOC_ENTRY_1DARRAY(val, 1); val(0) = (Entry) 0; return; } //info(); //We could check some flag ?? //We assume a pre-scan has already happened if(alloc == BASKER_TRUE) { //printf("ALLOC\n"); if(nnz > 0) { BASKER_ASSERT(nnz > 0, "matrix row nnz 2"); MALLOC_INT_1DARRAY(row_idx, nnz); } else if(nnz ==0) { BASKER_ASSERT((nnz+1)>0, "matrix row nnz 3"); MALLOC_INT_1DARRAY(row_idx, nnz+1); } } //init_value(row_idx, nnz, (Int) 0); //printf("clear row: %d \n", nnz); for(Int i = 0; i < nnz; ++i) { //printf("clear row_idx(%d) \n", i); row_idx(i) = 0; } if(alloc == BASKER_TRUE) { if(nnz > 0) { BASKER_ASSERT(nnz > 0, "matrix nnz 4"); MALLOC_ENTRY_1DARRAY(val, nnz); } else if(nnz == 0) { BASKER_ASSERT((nnz+1) > 0, "matrix nnz 5"); MALLOC_ENTRY_1DARRAY(val, nnz+1); } } //init_value(val, nnz, (Entry) 0); for(Int i = 0; i < nnz; ++i) { val(i) = 0; } Int temp_count = 0; for(Int k = scol; k < scol+ncol; ++k) { //note col_ptr[k-scol] contains the starting index if(col_ptr(k-scol) == BASKER_MAX_IDX) { col_ptr(k-scol) = temp_count; //printf("continue called, k: %d \n", k); continue; } for(Int i = col_ptr(k-scol); i < M.col_ptr(k+1); i++) { Int j = M.row_idx(i); //printf("i: %d j:%d \n", i,j); if(j >= srow+nrow) { break; } //printf("writing row_dix: %d i: %d val: %d nnz: %d srow: %d nrow: %d \n", // temp_count, i, j, nnz, // srow, nrow); //BASKER_ASSERT(temp_count < nnz, "2DConvert, too many values"); //row_idx[temp_count] = j; if(j-srow <0) { std::cout << "kid: " << kid << " j: " << j << " srow: " << srow << " k: " << k << " idx: " << i << std::endl; BASKER_ASSERT(0==1, "j-srow NO"); } row_idx(temp_count) = j-srow; val(temp_count) = M.val(i); temp_count++; } col_ptr(k-scol) = temp_count; } //col_ptr[0] = 0; //NO!!1 //Slide over the col counts for(Int i = ncol; i > 0; i--) { col_ptr(i) = col_ptr(i-1); } col_ptr(0) = (Int) 0; //info(); //print(); }//end convert2d(Matrix)