BASKER_INLINE int Basker<Int, Entry, Exe_Space>::Symbolic(Int nrow, Int ncol, Int nnz, Int *col_ptr, Int *row_idx, Entry *val) { //Init Matrix A. if(matrix_flag == BASKER_TRUE) { printf("YOU CANNOT RERUN SYMBOLIC\n"); return BASKER_ERROR; } else { A.init_matrix("Original Matrix", nrow, ncol, nnz, col_ptr, row_idx, val); A.scol = 0; A.srow = 0; sort_matrix(A); matrix_flag = BASKER_TRUE; } //Init Ordering //Always will do btf_ordering //This should also call create tree if(order_flag == BASKER_TRUE) { printf("YOU CANNOT RERUN ORDER\n"); return BASKER_ERROR; } else { printf("btf_order called \n"); //btf_order(); btf_order2(); if(btf_tabs_offset != 0) { basker_barrier.init(num_threads, 16, tree.nlvls ); } order_flag = BASKER_TRUE; //printf("btf_order done \n"); } //printf("\n\n+++++++++++++++BREAKER BREAKER++++++++\n\n"); if(symb_flag == BASKER_TRUE) { printf("YOU CANNOT RERUN SFACTOR\n"); return BASKER_ERROR; } else { sfactor(); symb_flag = BASKER_TRUE; } //printf("\nTEST ALM\n"); //ALM(0)(0).info(); //printf("\n"); return 0; }//end Symbolic()
BASKER_INLINE int Basker<Int, Entry, Exe_Space>::Symbolic(Int nrow, Int ncol, Int nnz, Int *col_ptr, Int *row_idx, Entry *val) { // printf("befor symbolic\n"); if(Options.verbose == BASKER_TRUE) { std::cout << "Basker Symbolic" << std::endl; std::cout << "Matrix: " << nrow << " " << ncol << " " << nnz << std::endl; } //Init Matrix A. if(matrix_flag == BASKER_TRUE) { printf("YOU CANNOT RERUN SYMBOLIC\n"); return BASKER_ERROR; } else { //Kokkos::Impl::Timer timer_move; if(Options.transpose == BASKER_FALSE) { //printf("=======NO TRANS=====\n"); A.init_matrix("Original Matrix", nrow, ncol, nnz, col_ptr, row_idx, val); A.scol = 0; A.srow = 0; } else { //printf("======TRANS=====\n"); //Will transpose and put in A using little extra matrix_transpose(0, nrow, 0, ncol, nnz, col_ptr, row_idx, val, A); } sort_matrix(A); if(Options.verbose == BASKER_TRUE) { printf("Basker Matrix Loaded \n"); } if(Options.verbose_matrix_out == BASKER_TRUE) { printMTX("A_Symbolic.mtx", A); } matrix_flag = BASKER_TRUE; //std::cout << "Transpose A: " << timer_move.seconds() // << std::endl; } //Init Ordering //Always will do btf_ordering //This should also call create tree if(order_flag == BASKER_TRUE) { printf("YOU CANNOT RERUN ORDER\n"); return BASKER_ERROR; } else { //printf("btf_order called \n"); //btf_order(); Kokkos::Impl::Timer timer_order; /* if(Options.incomplete == BASKER_TRUE) { order_incomplete(); } else { btf_order2(); } */ btf_order2(); if(Options.verbose == BASKER_TRUE) { printf("Basker Ordering Found \n"); } //if(btf_tabs_offset != 0) if((Options.btf == BASKER_TRUE) && (btf_tabs_offset != 0)) { basker_barrier.init(num_threads, 16, tree.nlvls ); } order_flag = BASKER_TRUE; if(Options.verbose == BASKER_TRUE) { printf("Basker P2P Thread Barriers Init\n"); } //std::cout << "Time Order/Init arrays " // << timer_order.seconds() // << std::endl; //printf("btf_order done \n"); } //printf("\n\n+++++++++++++++BREAKER BREAKER++++++++\n\n"); if(symb_flag == BASKER_TRUE) { printf("YOU CANNOT RERUN SFACTOR\n"); return BASKER_ERROR; } else { if(Options.incomplete == BASKER_FALSE) { sfactor(); } else { sfactor_inc(); } if(Options.verbose == BASKER_TRUE) { printf("Basker Nonzero Counts Found \n"); } symb_flag = BASKER_TRUE; } if(Options.verbose == BASKER_TRUE) { printf("Basker Symbolic Done \n"); } //printf("\nTEST ALM\n"); //ALM(0)(0).info(); //printf("\n"); return 0; }//end Symbolic()