//============================================================================= int Amesos_Umfpack::PerformNumericFactorization( ) { // MS // no overhead time in this method ResetTimer(0); RcondValidOnAllProcs_ = false ; if (MyPID_ == 0) { std::vector<double> Control(UMFPACK_CONTROL); std::vector<double> Info(UMFPACK_INFO); umfpack_di_defaults( &Control[0] ) ; if (Numeric) umfpack_di_free_numeric (&Numeric) ; int status = umfpack_di_numeric (&Ap[0], &Ai[0], &Aval[0], Symbolic, &Numeric, &Control[0], &Info[0]) ; Rcond_ = Info[UMFPACK_RCOND]; #if NOT_DEF std::cout << " Rcond_ = " << Rcond_ << std::endl ; int lnz1 = 1000 ; int unz1 = 1000 ; int n = 4; int * Lp = (int *) malloc ((n+1) * sizeof (int)) ; int * Lj = (int *) malloc (lnz1 * sizeof (int)) ; double * Lx = (double *) malloc (lnz1 * sizeof (double)) ; int * Up = (int *) malloc ((n+1) * sizeof (int)) ; int * Ui = (int *) malloc (unz1 * sizeof (int)) ; double * Ux = (double *) malloc (unz1 * sizeof (double)) ; int * P = (int *) malloc (n * sizeof (int)) ; int * Q = (int *) malloc (n * sizeof (int)) ; double * Dx = (double *) NULL ; /* D vector not requested */ double * Rs = (double *) malloc (n * sizeof (double)) ; if (!Lp || !Lj || !Lx || !Up || !Ui || !Ux || !P || !Q || !Rs) { assert( false ) ; } int do_recip; status = umfpack_di_get_numeric (Lp, Lj, Lx, Up, Ui, Ux, P, Q, Dx, &do_recip, Rs, Numeric) ; if (status < 0) { assert( false ) ; } printf ("\nL (lower triangular factor of C): ") ; (void) umfpack_di_report_matrix (n, n, Lp, Lj, Lx, 0, &Control[0]) ; printf ("\nU (upper triangular factor of C): ") ; (void) umfpack_di_report_matrix (n, n, Up, Ui, Ux, 1, &Control[0]) ; printf ("\nP: ") ; (void) umfpack_di_report_perm (n, P, &Control[0]) ; printf ("\nQ: ") ; (void) umfpack_di_report_perm (n, Q, &Control[0]) ; printf ("\nScale factors: row i of A is to be ") ; #endif assert( status == 0 ) ; } NumFactTime_ = AddTime("Total numeric factorization time", NumFactTime_, 0); return 0; }
inline int report_perm (double, int, int np, int const* Perm, double const* Control) { return umfpack_di_report_perm (np, Perm, Control); }