umfpack.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. /* ========================================================================== */
  2. /* === umfpack.h ============================================================ */
  3. /* ========================================================================== */
  4. /* -------------------------------------------------------------------------- */
  5. /* UMFPACK Copyright (c) Timothy A. Davis, CISE, */
  6. /* Univ. of Florida. All Rights Reserved. See ../Doc/License for License. */
  7. /* web: http://www.cise.ufl.edu/research/sparse/umfpack */
  8. /* -------------------------------------------------------------------------- */
  9. /*
  10. This is the umfpack.h include file, and should be included in all user code
  11. that uses UMFPACK. Do not include any of the umf_* header files in user
  12. code. All routines in UMFPACK starting with "umfpack_" are user-callable.
  13. All other routines are prefixed "umf_XY_", (where X is d or z, and Y is
  14. i or l) and are not user-callable.
  15. */
  16. #ifndef UMFPACK_H
  17. #define UMFPACK_H
  18. /* -------------------------------------------------------------------------- */
  19. /* Make it easy for C++ programs to include UMFPACK */
  20. /* -------------------------------------------------------------------------- */
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. /* define UF_long */
  25. #include "UFconfig.h"
  26. /* -------------------------------------------------------------------------- */
  27. /* size of Info and Control arrays */
  28. /* -------------------------------------------------------------------------- */
  29. /* These might be larger in future versions, since there are only 3 unused
  30. * entries in Info, and no unused entries in Control. */
  31. #define UMFPACK_INFO 90
  32. #define UMFPACK_CONTROL 20
  33. /* -------------------------------------------------------------------------- */
  34. /* User-callable routines */
  35. /* -------------------------------------------------------------------------- */
  36. /* Primary routines: */
  37. #include "umfpack_symbolic.h"
  38. #include "umfpack_numeric.h"
  39. #include "umfpack_solve.h"
  40. #include "umfpack_free_symbolic.h"
  41. #include "umfpack_free_numeric.h"
  42. /* Alternative routines: */
  43. #include "umfpack_defaults.h"
  44. #include "umfpack_qsymbolic.h"
  45. #include "umfpack_wsolve.h"
  46. /* Matrix manipulation routines: */
  47. #include "umfpack_triplet_to_col.h"
  48. #include "umfpack_col_to_triplet.h"
  49. #include "umfpack_transpose.h"
  50. #include "umfpack_scale.h"
  51. /* Getting the contents of the Symbolic and Numeric opaque objects: */
  52. #include "umfpack_get_lunz.h"
  53. #include "umfpack_get_numeric.h"
  54. #include "umfpack_get_symbolic.h"
  55. #include "umfpack_save_numeric.h"
  56. #include "umfpack_load_numeric.h"
  57. #include "umfpack_save_symbolic.h"
  58. #include "umfpack_load_symbolic.h"
  59. #include "umfpack_get_determinant.h"
  60. /* Reporting routines (the above 14 routines print nothing): */
  61. #include "umfpack_report_status.h"
  62. #include "umfpack_report_info.h"
  63. #include "umfpack_report_control.h"
  64. #include "umfpack_report_matrix.h"
  65. #include "umfpack_report_triplet.h"
  66. #include "umfpack_report_vector.h"
  67. #include "umfpack_report_symbolic.h"
  68. #include "umfpack_report_numeric.h"
  69. #include "umfpack_report_perm.h"
  70. /* Utility routines: */
  71. #include "umfpack_timer.h"
  72. #include "umfpack_tictoc.h"
  73. /* AMD */
  74. #include "amd.h"
  75. /* global function pointers */
  76. #include "umfpack_global.h"
  77. /* -------------------------------------------------------------------------- */
  78. /* Version, copyright, and license */
  79. /* -------------------------------------------------------------------------- */
  80. #define UMFPACK_VERSION "UMFPACK V5.1.0 (May 31, 2007)"
  81. #define UMFPACK_COPYRIGHT \
  82. "UMFPACK: Copyright (c) 2005-2006 by Timothy A. Davis. All Rights Reserved.\n"
  83. #define UMFPACK_LICENSE_PART1 \
  84. "\nUMFPACK License:\n" \
  85. "\n" \
  86. " UMFPACK is available under alternate licenses,\n" \
  87. " contact T. Davis for details.\n" \
  88. "\n" \
  89. " Your use or distribution of UMFPACK or any modified version of\n" \
  90. " UMFPACK implies that you agree to this License.\n" \
  91. "\n" \
  92. " This library is free software; you can redistribute it and/or\n" \
  93. " modify it under the terms of the GNU Lesser General Public\n" \
  94. " License as published by the Free Software Foundation; either\n" \
  95. " version 2.1 of the License, or (at your option) any later version.\n" \
  96. "\n" \
  97. " This library is distributed in the hope that it will be useful,\n" \
  98. " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" \
  99. " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n" \
  100. " Lesser General Public License for more details.\n" \
  101. "\n" \
  102. " You should have received a copy of the GNU Lesser General Public\n" \
  103. " License along with this library; if not, write to the Free Software\n" \
  104. " Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301\n" \
  105. " USA\n" \
  106. #define UMFPACK_LICENSE_PART2 \
  107. "\n" \
  108. " Permission is hereby granted to use or copy this program under the\n" \
  109. " terms of the GNU LGPL, provided that the Copyright, this License,\n" \
  110. " and the Availability of the original version is retained on all copies.\n" \
  111. " User documentation of any code that uses this code or any modified\n" \
  112. " version of this code must cite the Copyright, this License, the\n" \
  113. " Availability note, and \"Used by permission.\" Permission to modify\n" \
  114. " the code and to distribute modified code is granted, provided the\n" \
  115. " Copyright, this License, and the Availability note are retained,\n" \
  116. " and a notice that the code was modified is included.\n"
  117. #define UMFPACK_LICENSE_PART3 \
  118. "\n" \
  119. "Availability: http://www.cise.ufl.edu/research/sparse/umfpack\n" \
  120. "\n"
  121. /* UMFPACK Version 4.5 and later will include the following definitions.
  122. * As an example, to test if the version you are using is 4.5 or later:
  123. *
  124. * #ifdef UMFPACK_VER
  125. * if (UMFPACK_VER >= UMFPACK_VER_CODE (4,5)) ...
  126. * #endif
  127. *
  128. * This also works during compile-time:
  129. *
  130. * #if defined(UMFPACK_VER) && (UMFPACK >= UMFPACK_VER_CODE (4,5))
  131. * printf ("This is version 4.5 or later\n") ;
  132. * #else
  133. * printf ("This is an early version\n") ;
  134. * #endif
  135. *
  136. * Versions 4.4 and earlier of UMFPACK do not include a #define'd version
  137. * number, although they do include the UMFPACK_VERSION string, defined
  138. * above.
  139. */
  140. #define UMFPACK_DATE "May 31, 2007"
  141. #define UMFPACK_VER_CODE(main,sub) ((main) * 1000 + (sub))
  142. #define UMFPACK_MAIN_VERSION 5
  143. #define UMFPACK_SUB_VERSION 1
  144. #define UMFPACK_SUBSUB_VERSION 0
  145. #define UMFPACK_VER UMFPACK_VER_CODE(UMFPACK_MAIN_VERSION,UMFPACK_SUB_VERSION)
  146. /* -------------------------------------------------------------------------- */
  147. /* contents of Info */
  148. /* -------------------------------------------------------------------------- */
  149. /* Note that umfpack_report.m must coincide with these definitions. S is
  150. * the submatrix of A after removing row/col singletons and empty rows/cols. */
  151. /* returned by all routines that use Info: */
  152. #define UMFPACK_STATUS 0 /* UMFPACK_OK, or other result */
  153. #define UMFPACK_NROW 1 /* n_row input value */
  154. #define UMFPACK_NCOL 16 /* n_col input value */
  155. #define UMFPACK_NZ 2 /* # of entries in A */
  156. /* computed in UMFPACK_*symbolic and UMFPACK_numeric: */
  157. #define UMFPACK_SIZE_OF_UNIT 3 /* sizeof (Unit) */
  158. /* computed in UMFPACK_*symbolic: */
  159. #define UMFPACK_SIZE_OF_INT 4 /* sizeof (int) */
  160. #define UMFPACK_SIZE_OF_LONG 5 /* sizeof (UF_long) */
  161. #define UMFPACK_SIZE_OF_POINTER 6 /* sizeof (void *) */
  162. #define UMFPACK_SIZE_OF_ENTRY 7 /* sizeof (Entry), real or complex */
  163. #define UMFPACK_NDENSE_ROW 8 /* number of dense rows */
  164. #define UMFPACK_NEMPTY_ROW 9 /* number of empty rows */
  165. #define UMFPACK_NDENSE_COL 10 /* number of dense rows */
  166. #define UMFPACK_NEMPTY_COL 11 /* number of empty rows */
  167. #define UMFPACK_SYMBOLIC_DEFRAG 12 /* # of memory compactions */
  168. #define UMFPACK_SYMBOLIC_PEAK_MEMORY 13 /* memory used by symbolic analysis */
  169. #define UMFPACK_SYMBOLIC_SIZE 14 /* size of Symbolic object, in Units */
  170. #define UMFPACK_SYMBOLIC_TIME 15 /* time (sec.) for symbolic analysis */
  171. #define UMFPACK_SYMBOLIC_WALLTIME 17 /* wall clock time for sym. analysis */
  172. #define UMFPACK_STRATEGY_USED 18 /* strategy used: sym, unsym, 2by2 */
  173. #define UMFPACK_ORDERING_USED 19 /* ordering used: colamd, amd, given */
  174. #define UMFPACK_QFIXED 31 /* whether Q is fixed or refined */
  175. #define UMFPACK_DIAG_PREFERRED 32 /* whether diagonal pivoting attempted*/
  176. #define UMFPACK_PATTERN_SYMMETRY 33 /* symmetry of pattern of S */
  177. #define UMFPACK_NZ_A_PLUS_AT 34 /* nnz (S+S'), excl. diagonal */
  178. #define UMFPACK_NZDIAG 35 /* nnz (diag (S)) */
  179. /* AMD statistics, computed in UMFPACK_*symbolic: */
  180. #define UMFPACK_SYMMETRIC_LUNZ 36 /* nz in L+U, if AMD ordering used */
  181. #define UMFPACK_SYMMETRIC_FLOPS 37 /* flops for LU, if AMD ordering used */
  182. #define UMFPACK_SYMMETRIC_NDENSE 38 /* # of "dense" rows/cols in S+S' */
  183. #define UMFPACK_SYMMETRIC_DMAX 39 /* max nz in cols of L, for AMD */
  184. /* statistics for 2-by-2 strategy */
  185. #define UMFPACK_2BY2_NWEAK 51 /* number of weak diagonal entries*/
  186. #define UMFPACK_2BY2_UNMATCHED 52 /* # of weak diagonals not matched*/
  187. #define UMFPACK_2BY2_PATTERN_SYMMETRY 53 /* symmetry of pattern of P*S */
  188. #define UMFPACK_2BY2_NZ_PA_PLUS_PAT 54 /* nz in PS+(PS)' */
  189. #define UMFPACK_2BY2_NZDIAG 55 /* nz on diagonal of PS+(PS)' */
  190. /* statistcs for singleton pruning */
  191. #define UMFPACK_COL_SINGLETONS 56 /* # of column singletons */
  192. #define UMFPACK_ROW_SINGLETONS 57 /* # of row singletons */
  193. #define UMFPACK_N2 58 /* size of S */
  194. #define UMFPACK_S_SYMMETRIC 59 /* 1 if S square and symmetricly perm.*/
  195. /* estimates computed in UMFPACK_*symbolic: */
  196. #define UMFPACK_NUMERIC_SIZE_ESTIMATE 20 /* final size of Numeric->Memory */
  197. #define UMFPACK_PEAK_MEMORY_ESTIMATE 21 /* for symbolic & numeric */
  198. #define UMFPACK_FLOPS_ESTIMATE 22 /* flop count */
  199. #define UMFPACK_LNZ_ESTIMATE 23 /* nz in L, incl. diagonal */
  200. #define UMFPACK_UNZ_ESTIMATE 24 /* nz in U, incl. diagonal */
  201. #define UMFPACK_VARIABLE_INIT_ESTIMATE 25 /* initial size of Numeric->Memory*/
  202. #define UMFPACK_VARIABLE_PEAK_ESTIMATE 26 /* peak size of Numeric->Memory */
  203. #define UMFPACK_VARIABLE_FINAL_ESTIMATE 27 /* final size of Numeric->Memory */
  204. #define UMFPACK_MAX_FRONT_SIZE_ESTIMATE 28 /* max frontal matrix size */
  205. #define UMFPACK_MAX_FRONT_NROWS_ESTIMATE 29 /* max # rows in any front */
  206. #define UMFPACK_MAX_FRONT_NCOLS_ESTIMATE 30 /* max # columns in any front */
  207. /* exact values, (estimates shown above) computed in UMFPACK_numeric: */
  208. #define UMFPACK_NUMERIC_SIZE 40 /* final size of Numeric->Memory */
  209. #define UMFPACK_PEAK_MEMORY 41 /* for symbolic & numeric */
  210. #define UMFPACK_FLOPS 42 /* flop count */
  211. #define UMFPACK_LNZ 43 /* nz in L, incl. diagonal */
  212. #define UMFPACK_UNZ 44 /* nz in U, incl. diagonal */
  213. #define UMFPACK_VARIABLE_INIT 45 /* initial size of Numeric->Memory*/
  214. #define UMFPACK_VARIABLE_PEAK 46 /* peak size of Numeric->Memory */
  215. #define UMFPACK_VARIABLE_FINAL 47 /* final size of Numeric->Memory */
  216. #define UMFPACK_MAX_FRONT_SIZE 48 /* max frontal matrix size */
  217. #define UMFPACK_MAX_FRONT_NROWS 49 /* max # rows in any front */
  218. #define UMFPACK_MAX_FRONT_NCOLS 50 /* max # columns in any front */
  219. /* computed in UMFPACK_numeric: */
  220. #define UMFPACK_NUMERIC_DEFRAG 60 /* # of garbage collections */
  221. #define UMFPACK_NUMERIC_REALLOC 61 /* # of memory reallocations */
  222. #define UMFPACK_NUMERIC_COSTLY_REALLOC 62 /* # of costlly memory realloc's */
  223. #define UMFPACK_COMPRESSED_PATTERN 63 /* # of integers in LU pattern */
  224. #define UMFPACK_LU_ENTRIES 64 /* # of reals in LU factors */
  225. #define UMFPACK_NUMERIC_TIME 65 /* numeric factorization time */
  226. #define UMFPACK_UDIAG_NZ 66 /* nz on diagonal of U */
  227. #define UMFPACK_RCOND 67 /* est. reciprocal condition # */
  228. #define UMFPACK_WAS_SCALED 68 /* none, max row, or sum row */
  229. #define UMFPACK_RSMIN 69 /* min (max row) or min (sum row) */
  230. #define UMFPACK_RSMAX 70 /* max (max row) or max (sum row) */
  231. #define UMFPACK_UMIN 71 /* min abs diagonal entry of U */
  232. #define UMFPACK_UMAX 72 /* max abs diagonal entry of U */
  233. #define UMFPACK_ALLOC_INIT_USED 73 /* alloc_init parameter used */
  234. #define UMFPACK_FORCED_UPDATES 74 /* # of forced updates */
  235. #define UMFPACK_NUMERIC_WALLTIME 75 /* numeric wall clock time */
  236. #define UMFPACK_NOFF_DIAG 76 /* number of off-diagonal pivots */
  237. #define UMFPACK_ALL_LNZ 77 /* nz in L, if no dropped entries */
  238. #define UMFPACK_ALL_UNZ 78 /* nz in U, if no dropped entries */
  239. #define UMFPACK_NZDROPPED 79 /* # of dropped small entries */
  240. /* computed in UMFPACK_solve: */
  241. #define UMFPACK_IR_TAKEN 80 /* # of iterative refinement steps taken */
  242. #define UMFPACK_IR_ATTEMPTED 81 /* # of iter. refinement steps attempted */
  243. #define UMFPACK_OMEGA1 82 /* omega1, sparse backward error estimate */
  244. #define UMFPACK_OMEGA2 83 /* omega2, sparse backward error estimate */
  245. #define UMFPACK_SOLVE_FLOPS 84 /* flop count for solve */
  246. #define UMFPACK_SOLVE_TIME 85 /* solve time (seconds) */
  247. #define UMFPACK_SOLVE_WALLTIME 86 /* solve time (wall clock, seconds) */
  248. /* Info [87, 88, 89] unused */
  249. /* Unused parts of Info may be used in future versions of UMFPACK. */
  250. /* -------------------------------------------------------------------------- */
  251. /* Info [UMFPACK_ORDERING_USED] is one of the following: */
  252. #define UMFPACK_ORDERING_COLAMD 0 /* COLAMD(A) */
  253. #define UMFPACK_ORDERING_AMD 1 /* AMD(A+A') */
  254. #define UMFPACK_ORDERING_GIVEN 2 /* Q is provided on input */
  255. /* -------------------------------------------------------------------------- */
  256. /* contents of Control */
  257. /* -------------------------------------------------------------------------- */
  258. /* used in all UMFPACK_report_* routines: */
  259. #define UMFPACK_PRL 0 /* print level */
  260. /* used in UMFPACK_*symbolic only: */
  261. #define UMFPACK_DENSE_ROW 1 /* dense row parameter */
  262. #define UMFPACK_DENSE_COL 2 /* dense col parameter */
  263. #define UMFPACK_BLOCK_SIZE 4 /* BLAS-3 block size */
  264. #define UMFPACK_STRATEGY 5 /* auto, symmetric, unsym., or 2by2 */
  265. #define UMFPACK_2BY2_TOLERANCE 12 /* 2-by-2 pivot tolerance */
  266. #define UMFPACK_FIXQ 13 /* -1: no fixQ, 0: default, 1: fixQ */
  267. #define UMFPACK_AMD_DENSE 14 /* for AMD ordering */
  268. #define UMFPACK_AGGRESSIVE 19 /* whether or not to use aggressive
  269. * absorption in AMD and COLAMD */
  270. /* used in UMFPACK_numeric only: */
  271. #define UMFPACK_PIVOT_TOLERANCE 3 /* threshold partial pivoting setting */
  272. #define UMFPACK_ALLOC_INIT 6 /* initial allocation ratio */
  273. #define UMFPACK_SYM_PIVOT_TOLERANCE 15 /* threshold, only for diag. entries */
  274. #define UMFPACK_SCALE 16 /* what row scaling to do */
  275. #define UMFPACK_FRONT_ALLOC_INIT 17 /* frontal matrix allocation ratio */
  276. #define UMFPACK_DROPTOL 18 /* drop tolerance for entries in L,U */
  277. /* used in UMFPACK_*solve only: */
  278. #define UMFPACK_IRSTEP 7 /* max # of iterative refinements */
  279. /* compile-time settings - Control [8..11] cannot be changed at run time: */
  280. #define UMFPACK_COMPILED_WITH_BLAS 8 /* uses the BLAS */
  281. #define UMFPACK_COMPILED_FOR_MATLAB 9 /* 1 if MATLAB mexFunction, etc. */
  282. #define UMFPACK_COMPILED_WITH_GETRUSAGE 10 /* uses getrusage timer, or not */
  283. #define UMFPACK_COMPILED_IN_DEBUG_MODE 11 /* debugging enabled (very slow!) */
  284. /* -------------------------------------------------------------------------- */
  285. /* Control [UMFPACK_STRATEGY] is one of the following: */
  286. #define UMFPACK_STRATEGY_AUTO 0 /* use sym. or unsym. strategy */
  287. #define UMFPACK_STRATEGY_UNSYMMETRIC 1 /* COLAMD(A), coletree postorder,
  288. not prefer diag*/
  289. #define UMFPACK_STRATEGY_2BY2 2 /* AMD(PA+PA'), no coletree postorder,
  290. prefer diag(PA) where P is pseudo
  291. max transversal */
  292. #define UMFPACK_STRATEGY_SYMMETRIC 3 /* AMD(A+A'), no coletree postorder,
  293. prefer diagonal */
  294. /* Control [UMFPACK_SCALE] is one of the following: */
  295. #define UMFPACK_SCALE_NONE 0 /* no scaling */
  296. #define UMFPACK_SCALE_SUM 1 /* default: divide each row by sum (abs (row))*/
  297. #define UMFPACK_SCALE_MAX 2 /* divide each row by max (abs (row)) */
  298. /* -------------------------------------------------------------------------- */
  299. /* default values of Control: */
  300. /* -------------------------------------------------------------------------- */
  301. #define UMFPACK_DEFAULT_PRL 1
  302. #define UMFPACK_DEFAULT_DENSE_ROW 0.2
  303. #define UMFPACK_DEFAULT_DENSE_COL 0.2
  304. #define UMFPACK_DEFAULT_PIVOT_TOLERANCE 0.1
  305. #define UMFPACK_DEFAULT_2BY2_TOLERANCE 0.01
  306. #define UMFPACK_DEFAULT_SYM_PIVOT_TOLERANCE 0.001
  307. #define UMFPACK_DEFAULT_BLOCK_SIZE 32
  308. #define UMFPACK_DEFAULT_ALLOC_INIT 0.7
  309. #define UMFPACK_DEFAULT_FRONT_ALLOC_INIT 0.5
  310. #define UMFPACK_DEFAULT_IRSTEP 2
  311. #define UMFPACK_DEFAULT_SCALE UMFPACK_SCALE_SUM
  312. #define UMFPACK_DEFAULT_STRATEGY UMFPACK_STRATEGY_AUTO
  313. #define UMFPACK_DEFAULT_AMD_DENSE AMD_DEFAULT_DENSE
  314. #define UMFPACK_DEFAULT_FIXQ 0
  315. #define UMFPACK_DEFAULT_AGGRESSIVE 1
  316. #define UMFPACK_DEFAULT_DROPTOL 0
  317. /* default values of Control may change in future versions of UMFPACK. */
  318. /* -------------------------------------------------------------------------- */
  319. /* status codes */
  320. /* -------------------------------------------------------------------------- */
  321. #define UMFPACK_OK (0)
  322. /* status > 0 means a warning, but the method was successful anyway. */
  323. /* A Symbolic or Numeric object was still created. */
  324. #define UMFPACK_WARNING_singular_matrix (1)
  325. /* The following warnings were added in umfpack_*_get_determinant */
  326. #define UMFPACK_WARNING_determinant_underflow (2)
  327. #define UMFPACK_WARNING_determinant_overflow (3)
  328. /* status < 0 means an error, and the method was not successful. */
  329. /* No Symbolic of Numeric object was created. */
  330. #define UMFPACK_ERROR_out_of_memory (-1)
  331. #define UMFPACK_ERROR_invalid_Numeric_object (-3)
  332. #define UMFPACK_ERROR_invalid_Symbolic_object (-4)
  333. #define UMFPACK_ERROR_argument_missing (-5)
  334. #define UMFPACK_ERROR_n_nonpositive (-6)
  335. #define UMFPACK_ERROR_invalid_matrix (-8)
  336. #define UMFPACK_ERROR_different_pattern (-11)
  337. #define UMFPACK_ERROR_invalid_system (-13)
  338. #define UMFPACK_ERROR_invalid_permutation (-15)
  339. #define UMFPACK_ERROR_internal_error (-911) /* yes, call me if you get this! */
  340. #define UMFPACK_ERROR_file_IO (-17)
  341. /* -------------------------------------------------------------------------- */
  342. /* solve codes */
  343. /* -------------------------------------------------------------------------- */
  344. /* Solve the system ( )x=b, where ( ) is defined below. "t" refers to the */
  345. /* linear algebraic transpose (complex conjugate if A is complex), or the (') */
  346. /* operator in MATLAB. "at" refers to the array transpose, or the (.') */
  347. /* operator in MATLAB. */
  348. #define UMFPACK_A (0) /* Ax=b */
  349. #define UMFPACK_At (1) /* A'x=b */
  350. #define UMFPACK_Aat (2) /* A.'x=b */
  351. #define UMFPACK_Pt_L (3) /* P'Lx=b */
  352. #define UMFPACK_L (4) /* Lx=b */
  353. #define UMFPACK_Lt_P (5) /* L'Px=b */
  354. #define UMFPACK_Lat_P (6) /* L.'Px=b */
  355. #define UMFPACK_Lt (7) /* L'x=b */
  356. #define UMFPACK_Lat (8) /* L.'x=b */
  357. #define UMFPACK_U_Qt (9) /* UQ'x=b */
  358. #define UMFPACK_U (10) /* Ux=b */
  359. #define UMFPACK_Q_Ut (11) /* QU'x=b */
  360. #define UMFPACK_Q_Uat (12) /* QU.'x=b */
  361. #define UMFPACK_Ut (13) /* U'x=b */
  362. #define UMFPACK_Uat (14) /* U.'x=b */
  363. /* -------------------------------------------------------------------------- */
  364. /* Integer constants are used for status and solve codes instead of enum */
  365. /* to make it easier for a Fortran code to call UMFPACK. */
  366. #ifdef __cplusplus
  367. }
  368. #endif
  369. #endif /* UMFPACK_H */