17#include "fasp_functs.h"
52 double* Ax = ptrA->
val;
57 double Control[UMFPACK_CONTROL], Info[UMFPACK_INFO];
60 Control[UMFPACK_PRL] = prtlvl;
62 Control[UMFPACK_PRL] = 0;
68 printf(
"### DEBUG: %s ...... [Start]\n", __FUNCTION__);
69 printf(
"### DEBUG: nr=%d, nc=%d, nnz=%d\n", m, n, nnz);
72 REAL start_time, end_time;
76 status = umfpack_di_symbolic(n, n, Ap, Ai, Ax, &Symbolic, Control, Info);
77 if (prtlvl >
PRINT_MORE) umfpack_di_report_status(Control, status);
78 if (prtlvl >
PRINT_MOST) umfpack_di_report_control(Control);
79 if (prtlvl >
PRINT_MORE) umfpack_di_report_info(Control, Info);
81 printf(
"### ERROR: %d, %s %d\n", status, __FUNCTION__, __LINE__);
82 printf(
"### ERROR: UMFPACK symbolic factorization failed!\n");
87 status = umfpack_di_numeric(Ap, Ai, Ax, Symbolic, &Numeric, Control, Info);
88 if (prtlvl >
PRINT_MORE) umfpack_di_report_status(Control, status);
89 if (prtlvl >
PRINT_MOST) umfpack_di_report_control(Control);
90 if (prtlvl >
PRINT_MORE) umfpack_di_report_info(Control, Info);
92 printf(
"### ERROR: %d, %s %d\n", status, __FUNCTION__, __LINE__);
93 printf(
"### ERROR: UMFPACK numeric factorization failed!\n");
98 umfpack_di_free_symbolic(&Symbolic);
102 umfpack_di_solve(UMFPACK_A, Ap, Ai, Ax, u->
val, b->
val, Numeric, Control, Info);
103 if (prtlvl >
PRINT_MORE) umfpack_di_report_status(Control, status);
104 if (prtlvl >
PRINT_MOST) umfpack_di_report_control(Control);
105 if (prtlvl >
PRINT_MORE) umfpack_di_report_info(Control, Info);
107 printf(
"### ERROR: %d, %s %d\n", status, __FUNCTION__, __LINE__);
108 printf(
"### ERROR: UMFPACK solve failed!\n");
113 umfpack_di_free_numeric(&Numeric);
121 printf(
"### DEBUG: %s ...... [Finish]\n", __FUNCTION__);
128 printf(
"### ERROR: UMFPACK is not available!\n");
145void* fasp_umfpack_factorize(
dCSRmat* ptrA,
const SHORT prtlvl)
154 double Control[UMFPACK_CONTROL], Info[UMFPACK_INFO];
157 Control[UMFPACK_PRL] = prtlvl;
159 Control[UMFPACK_PRL] = 0;
164 const INT nnz = ptrA->
nnz;
165 printf(
"### DEBUG: %s ...... [Start]\n", __FUNCTION__);
166 printf(
"### DEBUG: nr=%d, nc=%d, nnz=%d\n", m, n, nnz);
169 REAL start_time, end_time;
173 status = umfpack_di_symbolic(n, n, Ap, Ai, Ax, &Symbolic, Control, Info);
174 if (prtlvl >
PRINT_MORE) umfpack_di_report_status(Control, status);
175 if (prtlvl >
PRINT_MOST) umfpack_di_report_control(Control);
176 if (prtlvl >
PRINT_MORE) umfpack_di_report_info(Control, Info);
178 printf(
"### ERROR: %d, %s %d\n", status, __FUNCTION__, __LINE__);
179 printf(
"### ERROR: UMFPACK symbolic factorization failed!\n");
184 status = umfpack_di_numeric(Ap, Ai, Ax, Symbolic, &Numeric, Control, Info);
185 if (prtlvl >
PRINT_MORE) umfpack_di_report_status(Control, status);
186 if (prtlvl >
PRINT_MOST) umfpack_di_report_control(Control);
187 if (prtlvl >
PRINT_MORE) umfpack_di_report_info(Control, Info);
189 printf(
"### ERROR: %d, %s %d\n", status, __FUNCTION__, __LINE__);
190 printf(
"### ERROR: UMFPACK numeric factorization failed!\n");
194 umfpack_di_free_symbolic(&Symbolic);
202 printf(
"### DEBUG: %s ...... [Finish]\n", __FUNCTION__);
228 double* Ax = ptrA->
val;
229 double Control[UMFPACK_CONTROL], Info[UMFPACK_INFO];
232 Control[UMFPACK_PRL] = prtlvl;
234 Control[UMFPACK_PRL] = 0;
240 const INT nnz = ptrA->
nnz;
241 printf(
"### DEBUG: %s ...... [Start]\n", __FUNCTION__);
242 printf(
"### DEBUG: nr=%d, nc=%d, nnz=%d\n", m, n, nnz);
245 REAL start_time, end_time;
250 umfpack_di_solve(UMFPACK_A, Ap, Ai, Ax, u->
val, b->
val, Numeric, Control, Info);
251 if (prtlvl >
PRINT_MORE) umfpack_di_report_status(Control, status);
252 if (prtlvl >
PRINT_MOST) umfpack_di_report_control(Control);
253 if (prtlvl >
PRINT_MORE) umfpack_di_report_info(Control, Info);
255 printf(
"### ERROR: %d, %s %d\n", status, __FUNCTION__, __LINE__);
256 printf(
"### ERROR: UMFPACK solve failed!\n");
266 printf(
"### DEBUG: %s ...... [Finish]\n", __FUNCTION__);
281INT fasp_umfpack_free_numeric(
void* Numeric)
286 printf(
"### DEBUG: %s ...... [Start]\n", __FUNCTION__);
289 umfpack_di_free_numeric(&Numeric);
292 printf(
"### DEBUG: %s ...... [Finish]\n", __FUNCTION__);
void fasp_cputime(const char *message, const REAL cputime)
Print CPU walltime.
void fasp_gettime(REAL *time)
Get system time.
INT fasp_solver_umfpack(dCSRmat *ptrA, dvector *b, dvector *u, const SHORT prtlvl)
Solve Au=b by UMFpack.
Main header file for the FASP project.
#define SHORT
FASP integer and floating point numbers.
#define FASP_SUCCESS
Definition of return status and error messages.
#define ERROR_SOLVER_MISC
#define PRINT_NONE
Print level for all subroutines – not including DEBUG output.
#define ERROR_SOLVER_EXIT
Sparse matrix of REAL type in CSR format.
INT col
column of matrix A, n
REAL * val
nonzero entries of A
INT row
row number of matrix A, m
INT * IA
integer array of row pointers, the size is m+1
INT nnz
number of nonzero entries
INT * JA
integer array of column indexes, the size is nnz
Vector with n entries of REAL type.
REAL * val
actual vector entries